8

次のコード スニペットを作成しました。

var f = function() { document.write("a"); };

function foo() {
    f();

    var f = function() { document.write("b"); };
}

foo();

出力する関数aが呼び出されることを期待していましたが、代わりに値の呼び出しに関する実行時エラーが発生しundefinedます。なぜこれが起こるのですか?

4

2 に答える 2

14

変数巻き上げについてですhttp://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.htmlhttp://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

あなたのコードは次のものと同等です。

var f = function() { document.write("a"); };
function foo() {
    //all var statements are analyzed when we enter the function
    var f;
    //at this step of execution f is undefined;
    f();
    f = function() { document.write("b"); };
}
foo();
于 2013-05-11T17:28:31.543 に答える