本地和全局变量的JavaScript范围

时间:2015-07-30 10:58:53

标签: javascript

以下是代码:

var foo = 1;
function bar() {
    alert(foo)
    if (!foo) {
        var foo = 10;
    }
    alert(foo);
}
bar();

虽然foo是全局变量。在调用b()函数之后,foo正在警告为未定义。因为它是全局变量,它应该警告为1对吗?如果我错了,请纠正我。

JSfiddle

2 个答案:

答案 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();