时常看到在些定义变量的“非常规”方法,特别是在一行上定义变量赋值的操作,有时看的很懵,所以特此去研究了一下此类定义。
var a = b = 3;
以前理解是:
var b = 3;
var a =b;
其实这是一个错误的理解,真正的意义是:
b = 3;
var a = b;
b
其实是一个全局变量,a
则不然,有可能是全局,也有可能是局部的变量,关键看它是在哪里声明的。
下面代码则可以解释此点:
example1
var a = b = 3; // 其中a、b是在全局中声明的,所以它们是一个全局变量。
console.log(window.a); // 3
console.log(window.b); // 3
console.log(a); // 3
console.log(b); // 3
example2
function example() {
var a = b = 3;
}
example();
console.log(a); // Uncaugth ReferenceError: a is not defined
console.log(b); // 3
我们知道,在js中只且只存在函数作用域,函数外部是不能访问到函数内部的变量,所以打印a的时候,因为a
是不个example函数中的局部变量,所以在函数外部打印是获取不到里面a
变量的,而b
为什么能访问的到且得到结果3
呢?那是因为此时的b
变量变成了一个全局变量。
我们可能通过在浏览器控制台打印window
,可以看到的b
确实已经挂载到window
上去了。