创建隐式全局变量的反例就是使用任务链进行部分var声明。下面的片段中,a
是本地变量但是b
确实全局变量,这可能不是你希望发生的:
// 反例,勿使用
function foo() {
var a = b = 0;
// ...
}
此现象发生的原因在于这个从右到左的赋值,首先,是赋值表达式b = 0
,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。换句话说,就好比你输入了:
var a = (b = 0);
如果你已经准备好声明变量,使用链分配是比较好的做法,不会产生任何意料之外的全局变量,如:
function foo() {
var a, b;
// ... a = b = 0; // 两个均局部变量
}