console.log(a());
function a(){
console.log("hello");
}
上記のコードから、私は"hello"
(そしていくつかundefined
の)コンソールにログオンすることを期待します。しかし、firebugは
ReferenceError: a is not defined
それで、firebugは巻き上げをしませんか?
console.log(a());
function a(){
console.log("hello");
}
上記のコードから、私は"hello"
(そしていくつかundefined
の)コンソールにログオンすることを期待します。しかし、firebugは
ReferenceError: a is not defined
それで、firebugは巻き上げをしませんか?
問題の理由は
子ブロック内で宣言された場合、関数は巻き上げられません。
MDNによる(ここでカバーされているのは標準のECMAScriptではありません)。
次のスニペットを比較します。
alert(c());
function c(){return 42;}
と
{
alert(c());
function c(){return 42;}
}
最初のものは42に警告し、2番目のものはスローしReferenceError
ます。
そして、Firebugで遊んでいるときに実行されるコードは次のとおりです。
data;
with(_FirebugCommandLine){ // >> block begins
console.log(a());
function a(){
console.log("hello");
}
} // << block ends
更新
観察された動作は、ChromeおよびIE9では観察されないため、Firefoxjavascriptエンジンではグリッチのようです。このフィドルを参照してください。