JS:
var a = 10;
function test() {
alert(a);
var a = 20;
alert(a);
}
test();
Run Code Online (Sandbox Code Playgroud)
上面的代码昨天与一位采访者进行了讨论,我说第一次浏览器会提醒10,下次它会提醒20,但我错了.它第一次警告未定义,第二次警告20.我很困惑,任何人在理论上和实际上都能解释这背后会发生什么......?
相关链接将非常有用.
在一个函数中,每一个都var被视为它出现在函数的最顶层.因此,您的代码被解释为如果它被写入:
function test() {
var a;
alert(a);
a = 20;
alert(a);
}
Run Code Online (Sandbox Code Playgroud)
它被称为吊装.请注意,它是提升的声明,而不是初始化赋值.
这里的效果是该函数内的任何地方都a引用局部变量,该变量隐藏了相对全局a的视图.
这是ES5规范的相关部分.它有些不透明.