次のコード スニペットを作成しました。
var f = function() { document.write("a"); };
function foo() {
f();
var f = function() { document.write("b"); };
}
foo();
出力する関数a
が呼び出されることを期待していましたが、代わりに値の呼び出しに関する実行時エラーが発生しundefined
ます。なぜこれが起こるのですか?
次のコード スニペットを作成しました。
var f = function() { document.write("a"); };
function foo() {
f();
var f = function() { document.write("b"); };
}
foo();
出力する関数a
が呼び出されることを期待していましたが、代わりに値の呼び出しに関する実行時エラーが発生しundefined
ます。なぜこれが起こるのですか?
変数巻き上げについてですhttp://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html、http://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();