1

この「関数定義は、if ステートメント、while ループ、またはその他のステートメント内に表示されない場合があります」の意味は何ですか。私はこの声明とかなり混乱しています。

4

1 に答える 1

0

この本で読んでいる問題の 1 つは、一部のブラウザーでは関数定義 (関数割り当てとは異なります) が本質的にホスト関数の先頭に持ち上げられるため、ステートメント内に配置することです (ステートメント内のようにif) 。まったく誤解を招くものです。コードは、ステートメントのその分岐が実行される場合にのみ関数が定義されるように見えますが、if必ずしもそうであるとは限りません。だから、それは悪い習慣です。おそらく多くの場合は機能しますが、悪い習慣です。

したがって、これではなく:

function main(foo) {
    if (foo) {
        function internal() {
            // code here
        }
        // code here
    }
}

内部関数を一番上に置きます。

function main(foo) {
    function internal() {
        // code here
    }
    if (foo) {
        // code here
    }
}

参考までに、厳密モードでは、内部関数の定義は上部でのみ許可されます。条件関数の割り当ては、次の構文でいつでも実行できます。

var internal;
if (foo) {
    internal = function() {}
}
于 2012-12-17T07:17:27.387 に答える