Open zlx362211854 opened 5 years ago
连等写法遵循从右向左的赋值规律,故 :
var c = d = 'xx'
// 等效于 =>
var c = (window.d = 'xx');
这种在局部赋值时尤其注意
我们知道,js中函数是一个独立的作用域,所以有时候我们在函数内部写代码的时候就容易放飞自我,写出这种代码:
function a() {
var c = d = 123
}
console.log(c) // undefined
console.log(d) // 123
很少注意到上面var c = d = 123
代码,造成了全局污染。
var c = d = 123
这条语句,其实分解一下,就变成这样:
function a() {
var d = 123;
c = d;
}
这样,d是由var声明的,有局部作用域,但是c没有通过var声明,变成了全局变量,所以造成了全局污染,即便是在函数内部也是一样。
JavaScript是从右向左开始执行,所以 c 和 d 赋予了相同的值。
好像等效于 var d = "xx",然后 var c = d,其实并不是。看下面的测试
连等于写法让 d 挂载到了 window 上。
结论:连等写法会造成全局污染。
Reference
Multiple left-hand assignment with JavaScript