(function ab() {
var a=b=2;
console.log(typeof a) //number
console.log(typeof b) //number
})()
console.log(typeof a) //undefined
console.log(typeof b)
由于 a 和 b 都定义在函数的封闭范围内,并且都始于 var关键字,大多数JavaScript开发人员期望 typeof a 和 typeof b 在上面的例子中都是undefined。
然而,事实并非如此。这里的问题是,大多数开发人员将语句 var a = b = 3; 错误地理解为是以下声明的简写:
var b = 3;
var a = b;
但事实上,var a = b = 3; 实际是以下声明的简写:
b = 3;
var a = b;
那么运行下面这段代码:
(function ab() {
var a=b=2;
})()
console.log(b)
console.log(a)
得到的结果是:
可以看出这里的a是局部变量,而b是全局变量。