2

この(例のために縮小された)関数が問題なく実行されることを期待しますが、次の理由で失敗しますfn2 is not defined

void function(){
    var var1 = fn1();
    var var2 = fn2();

    function fn1(){};

    return function fn2(){};
}();

fn2return ステートメントは、関数式 forをホイストからどのように除外しますか?

4

1 に答える 1

4

関数宣言で作成された関数のみがホイストされます。の関数return function fn2(){};は (名前付き) 関数で作成されているため、巻き上げられません。

関数がどのように評価されるかは、コンテキストに依存します。ステートメント (return ステートメントなど) 内のすべての関数は、関数式として解析されます。もう 1 つの例は、IIFEでの括弧の使用です。括弧はグループ化演算子として機能し、括弧の内容が式として評価されるようにします。

これに関する多くの情報は、Kangax の優れた記事に記載されています。

http://kangax.github.io/nfe/

于 2014-01-28T12:16:21.100 に答える