1

if内部のステートメントがbar定義fooされていない理由を誰かに説明してもらえますか?

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

2 に答える 2

2
// This foo is at the global level.
var foo = 1;
function bar() {
  // the compiler puts in this line:
    var foo;
    if (!foo) {
        // and the var here doesn't matter.
        foo = 10;
    }
    alert(foo);
}
bar();
于 2014-07-16T00:44:00.477 に答える
2

指定されたコードは次のように解析されます。

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

JS には関数スコープしかなく、ブロック スコープがないため、ローカル foo は関数の先頭に持ち上げられます。「巻き上げられた」変数は、関数の外部で定義された foo よりも優先されます。これが、変数が if ステートメントで未定義である理由です。

于 2014-07-16T00:44:29.433 に答える