2

私は2つの方法を見てきました...最初の方法が私にとって最も理にかなっています。

自己実行括弧は、関数括弧の直後に配置されます。All を括弧で囲んで関数式にしています。ここを参照

( function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
} () );

このスタイルでは、関数式を作成する括弧の後に自己実行括弧が配置されます。ここを参照

var Var = ( function ( window, undefined ) 
{

} )();

var が構文に違いを生むかどうかわかりません...?

4

3 に答える 3

4

あなたの質問への答えは、私の最初のコメントの即時機能に関するリンクにあります。基本的に、関数宣言自体が括弧で囲まれている限り、即時関数が必要な場合は、呼び出し元の括弧が中括弧の後に続くか、折り返しの括弧の後に続くかは関係ありません。ただし、ラッピングペアが必要ない場合は、次のように機能するため、への割り当てVarが適切になります。

var Var = function () {
    // do stuff; return stuff;
}();

しかし、これはしません:

function () {
    // do stuff;
}();

これは、関数宣言の後に予期しない括弧のペアが続くだけであるためです(構文エラー)。

于 2012-05-19T19:52:54.270 に答える
3

以下の間に違いはありません:

(function () {})();

(function () {}());

ただし、Douglas Crockford は 2 番目のスタイルを支持しています (そのため、JSLint は最初のスタイルについて文句を言うでしょう)。彼は、それが何を意味するにせよ、最初のものは「非生産的」であると言います... 私は最初のものを好みます。

于 2012-05-19T20:14:52.050 に答える
0

実際には2つの異なるパターンです。2番目のパターンは、一部のローカルをグローバル名前空間に公開するため、公開モジュールパターンと呼ばれます。

于 2012-05-19T20:10:21.080 に答える