大家好,我正在尝试理解 JavaScript 闭包,并对这段代码有一个快速的问题,
var a = 5;
function woot() {
console.log('a == 5 woot: ' + (a == 5).toString());
var a = 6;
function test() {
console.log('a == 6 test: ' + (a == 6).toString());
}
test();
}
console.log('a == 5 outside: ' + (a == 5).toString());
woot();
console.log('a == 5 end: ' + (a == 5).toString());
输出:
a == 5 outside: true
a == 5 woot: false
a == 6 test: true
a == 5 end: true
我期望所有输出都是 true
但 a
在 woot()< 的第一行是
。这是为什么?undefined
/
最佳答案
当您在函数内的任何位置声明变量时,该变量将成为该函数的局部变量,因为所有变量声明都移至函数的顶部。
在你的情况下,
console.log('a == 5 woot: ' + (a == 5).toString());
var a = 6;
在将 6
分配给 a
之前,a
将是 undefined
,但作用域是局部的。
您可能想阅读 MDN docs 中的变量提升示例.
并且按照相同的MDN var doc ,
The scope of a variable declared with var is the enclosing function
关于Javascript 闭包和内部作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305856/