2011-09-28 1 views
5

Javascriptでこのコードは何ですか?私はこのようなJavascriptのコードを参照してくださいいくつかのサイトにいくつかのJSコードで

SomeName.init = (function() { 
    // some stuff 
})(); 

私が意味する、これはこのようなjQueryプラグインのコードではありません。そして、

(function($){ 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

、それが何であります?結果のJSオブジェクトは何ですか?

+0

私はあなたに何を求めているのかよくわかりません。どちらのスニペットも、宣言され実行されている関数を示しています。それを超えて、彼らは関連しているように見えません。 –

+0

最初のものは、無名関数の結果を "init"という名前の変数に設定しています。 2番目の例で見られるように、無名関数はPLUG-IN(またはモジュール)を作成する際によく使用されるデザインパターンであり、しばしば「モジュールパターン」と呼ばれます。 –

+0

検索ボックスにあなたのタイトルを入力したとき、[ここに私が見つけたのは](http://stackoverflow.com/questions/5101638/what-does-this-javascript-code-mean)。 – user113716

答えて

2

Module Pattern。これらの2つのスニペットは、あなたが考えるよりも共通しています。

8

これは匿名関数です。varを使用して変数を宣言すると、グローバルスコープに変数がリークしません。

SomeName.init = (function() { 
    return 3.1415; 
})(); 

SomeName.init匿名関数宣言後()機能を実行するので、数(3.1415)です。匿名関数内で定義されない限り、元の関数を得るための方法は、ありません:

(function foo(){ 
    //foo refers to this function 
    too = foo; 
})();; 
//foo is undefined 
//too refers to the function, because `too` has been defined without var 
0

関数が返すものは何でも。

(function() { 
    //... 
})(); 

名前空間のコードとして、または自己実行コンストラクタを宣言する方法として使用されます。結果として得られるオブジェクトは、自己実行関数が返すものである。

2番目のスニペットは何も返しません。resulting JS objectはありません。

1
(function() { 
    // some stuff 
})() 

は、それ自体を即座に呼び出す無名関数です。これは、可変スコープがグローバルになるのを止めるための、コード内のクロージャです。