我正在练习一些场景并找到一个案例:
根据闭包栏功能应该有var x
的访问权限,所以我预计会因为if(!1)
而警告1并且条件变为假,但它会提醒undefined
并且条件变为真,第二个警报是价值10。
var x = 1;
function bar() {
alert(x);
if (!x) {
var x = 10;
}
alert(x);
}
bar();
所以我很困惑为什么它会提示未定义?
根据特定范围内的提升,您可以在任何位置始终定义变量。
如果是由于提升效应,它仍然需要警告10而不是未定义。
答案 0 :(得分:5)
提升导致变量在函数中的任何地方声明,未定义。
在bar
的第一行,由于该函数的第3行有var x
,因此全局x
被屏蔽,您会看到本地x
(是undefined
,因为尚未给出值。)
在bar
的第3行,您有x = 10
来定义变量。这没有悬挂。
在第5行,您提醒它,现在已定义。
答案 1 :(得分:1)
吊装将使您的代码有效地工作:
var x;
x = 1;
function bar() {
var x; //same as var x = undefined;
alert(x);
if (!x) {
x = 10;
}
alert(x);
}
bar();