2012-03-10 10 views
0

が、私はこの読み始め:http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth匿名クロージャとは何ですか?なぜクロージャは通常クロージャと異なるのですか?

を彼らは匿名のクロージャを参照してください。

これは、それがすべてを可能にする基本的な構造である、と は本当にのJavaScriptのシングル最高の機能です。匿名関数 を作成してすぐに実行します。関数内で実行されるコード はすべて、アプリケーションの存続期間を通じて プライバシーおよび状態を提供するクロージャー内に存在します。

(function() { 
    // ... all vars and functions are in this scope only 
    // still maintains access to all globals 
}()); 
  • 私は何が起こるかを理解していない自己実行匿名閉鎖ワイズ 機能、それが通常の閉鎖とは異なり、 なぜそれがそんなに特別なのですか?
  • どのような利点がありますか?
+4

*通常のクロージャー*はあなたに何を意味するのですか? –

+0

*「何が起こるのかわからない...それは通常の閉鎖とは違う」*何も違う。単なる一回限りの機能です。 「利益」とは、囲みスコープに変数が追加されていないことだけです。 –

+0

OKでも、私の質問は十分にはっきりしていないと思うが、私が欲しかった答えは@abresas – ilyo

答えて

3

クロージャ内で定義されていない変数は、ウィンドウ変数に入り、グローバル変数です。

例:

var SOME_CONSTANT = 4; 

function foo() { 
    var c = SOME_CONSTANT; 
    console.log(c); 
} 

foo(); 

あなたはこのコードを持っている場合は、SOME_CONSTANTを希望されない場合があり、インラインスクリプトなど、内で実行されるすべてのファイルとコードにグローバルになります。

は、あなただけのこのクロージャ内の変数を維持するために、自己呼び出すクロージャを使用することができます。

(function() { 
    var SOME_CONSTANT = 4; 

    function foo() { 
     var c = SOME_CONSTANT; 
     console.log(c); 
    } 

    foo(); 

}()); 

この方法であなただけの、そのモジュールのグローバル変数を持つモジュールを持つことができます。例えば、各ファイルのコードをそのような無名関数に囲まれているとします。

+3

あなたが私が間違っていることを知っているように投票したときにコメントしてください:) – abresas

+0

+1のコードサンプル... – bryanmac

+1

ちょうどこれを追加すると、これが特に重要な場合が1つあります。あなたはコントロールがほとんどまたはまったくありません。ウィンドウオブジェクトで変数を使用すると、それらを上書きしてコードを破損する可能性があります。無名関数は、そのエンクロージャー内で宣言した変数を保護します。 – Shane

1

この機能はすぐに実行されるという事実の他に「正常終了」との違いはありません。

関連する問題