问题描述
这是代码:
var foo = 1;
function bar() {
alert(foo)
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
而foo是全局变量。 调用b()函数后,foo将发出未定义的警报。 由于它是全局变量,因此应警告为1对吗? 如果我错了,请纠正我。
1楼
Quentin
3
已采纳
2015-07-30 11:00:25
您有两个名为foo
变量。
在第1行声明的是全局的,在第5行声明的另一个是bar
函数的局部。
请记住, var
语句是悬挂的,因此,如果您有一个函数的局部变量,那么它对于所有函数都是局部的。
当您在第3行和第7行提醒foo
的值时,就在提醒本地foo
。
2楼
Arun P Johny
1
2015-07-30 11:00:26
否...因为您将bar
函数内部的foo
声明为局部变量,所以在函数内部使用foo
将不会访问全局实例。
由于变量提升,您将变得undefined
,所有变量声明都将移至函数顶部,因此在执行时,您的函数将看起来像
var foo = 1;
function bar() {
var foo;
alert(foo)
if (!foo) {
foo = 10;
}
alert(foo);
}
bar();