检查此fiddle或以下代码并告诉我为什么此脚本的输出 10
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
答案 0 :(得分:4)
因为函数中的var
,将变量提升到顶部。好像您在函数顶部声明它,因此foo
被视为当前作用域中的局部变量,全局作用域中的foo
不受影响。您的代码与此相同:
var foo = 1;
function bar() {
var foo;
if (!foo) {
foo = 10;
}
alert(foo);
}
bar();
正如您所看到的,foo
在函数的顶部被声明为undefined
,但重要的是在if语句中没有得到值。