JS:
var a = 10;
function test() {
alert(a);
var a = 20;
alert(a);
}
test();
上面的代码昨天与一位采访者进行了讨论,我说第一次浏览器会提醒10,下次它会提醒20,但我错了。它第一次警告未定义,第二次警告20。我很困惑,任何人在理论上和实际上都可以解释这背后会发生什么......?
相关链接非常有用。
答案 0 :(得分:6)
在一个函数中,每个var
都被视为它出现在函数的最顶层。因此,您的代码被解释为它被写成:
function test() {
var a;
alert(a);
a = 20;
alert(a);
}
它被称为吊装。请注意,它是声明,而不是初始化分配。
这里的效果是在该函数内的任何地方,a
引用局部变量,该变量隐藏了视图中相对全局的a
。
答案 1 :(得分:1)
当你的变量在函数的局部范围内找到时,它就不会引用全局变量。全局变量的范围隐藏在函数内部,因此您第一次获得未定义的值。
这个概念叫做提升,即在JavaScript中,变量可以在使用后声明。换一种说法;变量可以在声明之前使用。