以下是代码:
var foo = 1;
function bar() {
alert(foo)
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
虽然foo是全局变量。在调用b()函数之后,foo正在警告为未定义。因为它是全局变量,它应该警告为1对吗?如果我错了,请纠正我。
答案 0 :(得分:3)
您有两个名为foo
的变量。
在第1行声明了一个,它是全局的,另一个在第5行声明,它是bar
函数的本地。
请记住,var
语句已被提升,因此如果您有一个函数的局部变量,则该函数的 all 是本地的。
当您在第3行和第7行提醒foo
的值时,您正在提醒当地foo
。
答案 1 :(得分:1)
否...因为您在foo
函数中声明bar
作为局部变量,所以在函数内部使用foo
时将无法访问全局实例。
由于变量提升,你得到undefined
,其中所有变量声明都将被移动到函数的顶部,因此在执行时你的函数看起来像
var foo = 1;
function bar() {
var foo;
alert(foo)
if (!foo) {
foo = 10;
}
alert(foo);
}
bar();