2011-06-19 19 views

答えて

4

このコードは関数式を作成し、すぐに呼び出します。

それは、スタンドアロンの括弧()

var unnamed = function() { ... }; 

(unnamed)(); 
0

と同じだが、関数を実行することを意味し、このコードでは、それは無名関数です。

1

;の前の最後の2つの括弧は、匿名関数を直接実行します。他の2つの括弧はオプションで、ちょうどある種の慣習です。

(function() { 
    var a = 42; 
})(); 

alert(a); // a is undefined 

ポール・アイリッシュは、これと他のJavaScriptのパターンについてかなり良いスクリーンキャストを持っています:

このパターンは、一般的にグローバル名前空間を汚染しないために使用されているhttp://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/

1

これはと呼ばれるものの基礎となりますJavascriptのModuleパターン記事の状態として、このパターンは、プライバシーや状態を維持するのに最適です、

http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

http://yuiblog.com/blog/2007/06/12/module-pattern/

基本的に、また、あなたのJavascriptのモジュールの疎結合とチェーンを許可する:詳細については、これらの記事を参照してください。

+1

OPの例はモジュールパターンではなく、すぐに実行される単純な無名関数式です。匿名関数の外部からアクセス可能なメソッドを持つオブジェクトを実際に作成した場合にのみ、モジュールパターンになります。通常、他の方法があるにもかかわらず、そのオブジェクトを返すことによって行われます。しかし、グローバルネームスペースを汚染することなく、特定の計算のための一時的な作業変数を作成するなど、匿名ですぐに実行される関数にコードをラップする理由は他にもあります。 – nnnnnn

+0

私はまだリソースが好きです。彼らは良い。 – mihsathe

+0

@nnnnnn:合意した、それはパターンではなく、パターンの基礎です。私はそれに応じて私の投稿を編集しました。 upvoteをしてください。 – Digbyswift

0

無名関数を作成して呼び出します。したがって、一度しか呼び出されない関数の名前空間とメモリの汚染を回避します。

類似なおに:

var f = function() { ... }; 
f(); 

この変形例は、メモリを節約し、名前空間の競合を回避する変数Fを作成回避します。