2

Javascript の自己実行機能は、コンパイルされたプログラムのように機能しますか。つまり、自己実行関数内の名前付き匿名関数の後にいくつかの関数を宣言し、名前付き匿名関数が実行時に他の関数を見つけるようにすることはできますか? つまり、なぜ次のように動作するのでしょうか?

名前付き匿名関数は実行時にのみ作成されるため、おそらく自己実行関数がコードを「コンパイル」して、名前付き匿名関数を呼び出し元の関数で使用できるようにすることはできないと思いました!!

(function(){
    var myFunc = function(){
        var bar = "Bar";
        return myFunc2() + bar;
    }

    function myFunc2(){
        return "Foo ";
    }

})()

あるいは

(function(){
    function myFunc(){
        var bar = "Bar";
        return myFunc2() + bar;
    }

    var myFunc2 = function(){
        return "Foo ";
    }

    window.fooBar = myFunc();

})()

console.log(fooBar);
4

3 に答える 3

0

コードで実際に何が起こるか見てみましょう。

1. 変数の代入を実行する関数があります: var myFunc = ;

2.関数を宣言します。(ただし、まだ呼び出さないでください)

3. myFunc を window.foobar に割り当てます。

4.そして、定義していた関数を呼び出します。

ここで、次の手順が実行されます。

  1. myFunc は関数をその値として取得します。

  2. myFunc2 が定義されます。

  3. window.foobar は myFunc() を呼び出した結果を取得します。つまり、myFunc()は myFunc2()を呼び出した結果を返し、その結果を bar に追加します。

したがって、window.foobar の値は「foobar」になります。

(いいえ、これはコンパイルされたプログラムがどのように機能するかではありません)

于 2013-08-21T13:05:52.633 に答える