javascript 全局变量为什么没有被改变?

window.myBoolean=newBoolean();myBoolean=false;console.log(myBoolean);chrome.extension... window.myBoolean = new Boolean();
myBoolean = false;
console.log(myBoolean);
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {

if(request.action === "copy") {

sendResponse(CopyDataFromWhopper()); //得到页面取得的信息,准备传出
myBoolean=true;
console.log(myBoolean);
} else if(request.action === "paste") {
var b = request.data;
console.log(myBoolean); // 这里的myBoolean还是false????
if (1) {
if (document.getElementById("F120230012_CMRABA-FRSTNM")) {
PasteFuntion1(b);//传入信息并赋值到页面
};
if (document.getElementById("phoneLblCell")) {
PasteFuntion2(b);//传入信息并赋值到页面
};
if (document.getElementById('firstName0')){
PasteFuntion3(b);//传入信息并赋值到页面
};
}

}

}

为什么else if 里面的myBoolean还是false,我不是在前面已经赋值true了吗?
展开
 我来答
longjingx
2018-03-24 · 超过11用户采纳过TA的回答
知道答主
回答量:17
采纳率:91%
帮助的人:14.8万
展开全部

能看出来,题主是在写一个chrome扩展

首先,把题主的代码格式化一下,更方便阅读:

现在开始:

代码最开始,在window域下定义一个变量 myBoolean,值为 false,这时候执行打印 结果当然也是 false。

然后进入 addListener 方法,方法实参是一个匿名函数,函数一开始进入了 if {} else if {} 判断,当 request.action = "copy" 的时候,进入 if 代码块,当 request.action = "paste" 时,进入 else if 代码块。根据题主的描述,代码应该是进入了 else if,所以 request.action = "paste"

下面就分析一下:

当 request.action = "copy" 时,进入 if,在 里面 myBoolean 值被修改为 true,这时打印 myBoolean 的值为 true,这一点没有疑问。再往下,因为 if 代码块被执行,所以代码不会再跳到 else if,匿名函数执行结束。

当 request.action = "paste" 时,因为 if 条件判断失败,所以不会进入 if 代码块执行(if 代码块中的 myBoolean = true 也就不会执行),而是直接进入 else if 代码块。在 else if 代码块中,myBoolean 并没有被重新赋值,所以 myBoolean 依然保持最开始的值 false。

最后:如果想要让一个变量的值改变,代码执行过程中,要有对该变量进行重新赋值的代码,不然最后打印的时候,变量还会是原始值

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式