当前位置: 代码迷 >> JavaScript >> JavaScript作用域在局部变量和全局变量上
  详细解决方案

JavaScript作用域在局部变量和全局变量上

热度:75   发布时间:2023-06-05 10:22:05.0

这是代码:

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

而foo是全局变量。 调用b()函数后,foo将发出未定义的警报。 由于它是全局变量,因此应警告为1对吗? 如果我错了,请纠正我。

您有两个名为foo变量。

在第1行声明的是全局的,在第5行声明的另一个是bar函数的局部。

请记住, var语句是悬挂的,因此,如果您有一个函数的局部变量,那么它对于所有函数都是局部的。

当您在第3行和第7行提醒foo的值时,就在提醒本地foo

否...因为您将bar函数内部的foo声明为局部变量,所以在函数内部使用foo将不会访问全局实例。

由于变量提升,您将变得undefined ,所有变量声明都将移至函数顶部,因此在执行时,您的函数将看起来像

var foo = 1;
function bar() {
    var foo;
    alert(foo)
    if (!foo) {
        foo = 10;
    }
    alert(foo);
}
bar();
  相关解决方案