javascript 全局变量为什么没有被改变?
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了吗? 展开
能看出来,题主是在写一个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。
最后:如果想要让一个变量的值改变,代码执行过程中,要有对该变量进行重新赋值的代码,不然最后打印的时候,变量还会是原始值