この(例のために縮小された)関数が問題なく実行されることを期待しますが、次の理由で失敗しますfn2 is not defined
:
void function(){
var var1 = fn1();
var var2 = fn2();
function fn1(){};
return function fn2(){};
}();
fn2
return ステートメントは、関数式 forをホイストからどのように除外しますか?
この(例のために縮小された)関数が問題なく実行されることを期待しますが、次の理由で失敗しますfn2 is not defined
:
void function(){
var var1 = fn1();
var var2 = fn2();
function fn1(){};
return function fn2(){};
}();
fn2
return ステートメントは、関数式 forをホイストからどのように除外しますか?
関数宣言で作成された関数のみがホイストされます。の関数return function fn2(){};
は (名前付き) 関数式で作成されているため、巻き上げられません。
関数がどのように評価されるかは、コンテキストに依存します。ステートメント (return ステートメントなど) 内のすべての関数は、関数式として解析されます。もう 1 つの例は、IIFEでの括弧の使用です。括弧はグループ化演算子として機能し、括弧の内容が式として評価されるようにします。
これに関する多くの情報は、Kangax の優れた記事に記載されています。