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

JavaScript在局部和全局变量上的作用域,javascript,Javascript,代码如下: var foo = 1; function bar() { alert(foo) if (!foo) { var foo = 10; } alert(foo); } bar(); 而foo是全局变量。调用b()函数后,foo将作为未定义的函数发出警报。因为它是全局变量,所以应该作为1发出警报,对吗?如果我错了,请纠正我 有两个变量称为foo 一个在第1行声明,它是全局的,另一个在第5行声明,它是bar函数的本地 请记住,var语句是挂

代码如下:

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

您有两个名为
foo
的变量

一个在第1行声明,它是全局的,另一个在第5行声明,它是
bar
函数的本地

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


当您在第3行和第7行警告
foo
的值时,您正在警告本地
foo

否。。。由于将
foo
bar
函数中声明为局部变量,因此在函数中使用
foo
时将不会访问全局实例

由于变量提升,您将获得未定义的
,其中所有变量声明将移动到函数顶部,因此在执行时,您的函数将如下所示

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

不。。。由于将
foo
bar
函数中声明为局部变量,因此在函数中使用
foo
时将不会访问全局实例

由于变量提升,您将获得未定义的
,其中所有变量声明将移动到函数顶部,因此在执行时,您的函数将如下所示

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

谢谢你的回答。。在第5行声明第二个变量之前。。。。我正在提醒全局变量。。。然后就显现出来了undefined@answer99-不,你不是。再读一遍我的答案。请特别注意最后两段。谢谢你的回答。。在第5行声明第二个变量之前。。。。我正在提醒全局变量。。。然后就显现出来了undefined@answer99-不,你不是。再读一遍我的答案。特别注意最后两段。