与Javascript中的提升混淆

与Javascript中的提升混淆,javascript,hoisting,Javascript,Hoisting,有人能解释一下为什么条中的语句没有定义foous吗 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 给定的代码将按如下方式解析: var foo = 1; function bar() { var foo; if (!foo) { foo = 10; } alert(foo); } bar();

有人能解释一下为什么
条中的
语句没有定义
foo
us吗

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

给定的代码将按如下方式解析:

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

本地foo被提升到函数的顶部,因为JS只有函数作用域,没有阻塞作用域。“highed”变量将优先于函数外部定义的foo,这就是为什么在if语句中未定义该变量的原因。

给定代码的解析如下:

var foo = 1;
function bar() {
    var foo;
    if (!foo) {
        foo = 10;
    }
    alert(foo);
}
bar();
本地foo被提升到函数的顶部,因为JS只有函数作用域,没有阻塞作用域。“highed”变量将优先于函数外部定义的foo,这就是if语句中未定义该变量的原因