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了吗?
能看出来,题主是在写一个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。
最后:如果想要让一个变量的值改变,代码执行过程中,要有对该变量进行重新赋值的代码,不然最后打印的时候,变量还会是原始值
javascript 全局变量为什么没有被改变?
最后:如果想要让一个变量的值改变,代码执行过程中,要有对该变量进行重新赋值的代码,不然最后打印的时候,变量还会是原始值
javascript中全局变量的值为什么没改变
你应该检查一下,估计就是没有在startAnalyze()方法之前调用getValue(obj) 方法,设个断点跑一跑,看看
js变量修改了但是拿到的还是没改前的
在 JavaScript 中,如果变量被修改了,但是拿到的还是没改前的值,可能是由于以下原因:1. 变量作用域问题:变量的作用域会影响变量的访问。如果变量被定义在函数内部,那么在函数外部就无法访问该变量,也就无法拿到该变量的值。此时,可以将变量定义在全局作用域中,从而保证变量的可访问性。2. 变量赋...
javascript,我在一个网页里用了个全局变量,每执行一次就给这个变量加...
如果这个函数只是这样的话你的count是变的,而且肯定是变的!除服外面还有嵌套,并且重新定义了count,这里if是判断,如果count<=9那么就执行下面的,执行完之后你的count就等于2了这个是肯定的。如果不信,你可以用alert(count);一下看看,肯定是变了,但是不能刷新,要是刷新了你的count就又从1开始...
JavaScript中变量声明var、let、const的区别
在JavaScript中,变量声明的三种关键字——var、let、const,各自拥有不同的特性与用途。首先,var关键字用于声明全局作用域或函数作用域的变量。在函数外声明的var变量将被挂载于window对象上,全局访问。函数内部声明的var变量同样具有全局作用域,如果未明确指定作用域,变量将自动成为全局变量。var声明的...
全面掌握Javascript中「let、var、const」的区别
JavaScript中的变量声明方式有var、let和const,它们之间存在显著差异。主要的区别体现在块级作用域、变量提升、暂时性死区以及变量的可变性上。首先,var在ES5中是唯一的变量声明方式,没有块级作用域。这导致内层变量可能覆盖外层,且循环变量易成为全局变量,增加了开发复杂性。ES6引入的let和const引入了块...
JS全局变量是全局对象的属性,函数局部变量为什么就不是函数的属性...
全局变量,局部变量 局部变量和全局变量同名时,会隐藏这个全局变量 4.3.1 没有块级作用域 函数中声明的变量,无论在哪里声明的,在整个函数中它们都是有定义的 4.3.2 未声明的变量和未赋值的变量 alert(u);会产生一个错误--使用未声明的变量会产生一个错误 var u;alert(u);会跳出undefined---使用未赋值的变量...
javascript中设置了全局变量但是不管用呢 代码如下:
因为打错了,所以程序报错了;既然报错,程序无法往下执行,也就进不了 else 分支 printInfo(nodess[x],level);str 是全局的 如果你想获取网页的所有标签,可以使用 document.getElementsByTagName('*')如果你想获取具体某个标签下的所有标签,比如获取 body 下的所有子标签,可以使用 document.body....
浅析Js中const,let,var的区别及作用域
早期的JavaScript中,声明变量只能使用var关键字定义变量,并没有定义常量的功能。通过var关键字定义的变量,其作用域只能函数级或是全局作用域,并没有块级作用域。ES6(ECMAScript 2015)对这一问题做了改善,增加了用于定义块级变量的let关键字和用于定义常量的const关键字。ES2015(ES6) 新增加了两个...
javascript变量清空的问题?
服务器内存一点都不会被这个全局变量所占用,只是占用某一个客户机器的内存。所以如果这个js要实现很复杂的功能,要考虑到客户端内存,其实就是你的javascript程序自身的优化问题了。关于资源回收javascript和java一样是有个自动的垃圾处理器,见下面部分 javascript的垃圾回收 在javascript权威指南中有两小节...