3

javascript 関数で関数を記述する次の方法を説明してください。

(function (){
 // some code 
})()

末尾の中かっこ「 () 」があるため、関数がすぐに実行されるという事実は理解していますが、中かっこで関数を囲むとはどういう意味ですか?

4

3 に答える 3

4

RobG が指摘したように、これは元の質問で唯一有効なステートメントの選択肢です。

(function (){
 // some code 
}())

これは解析された直後に実行され、関数内のコードを残りのコードから範囲外にする方法を提供します。これはクロージャーと呼ばれ ( MDN の Closures を参照) 、スクリプトでのメモリーリークの解決に役立つ場合があります。

于 2011-06-14T08:29:50.423 に答える
4

構文が正しくありません。編集:修正。

一度だけ呼び出したい通常の関数定義を見てください。

function add(x,y) {
   var z = x + y; 
   // do something with z
}

add(2,3);

このコードをすぐに実行できるように短縮できます。 addという名前を付ける必要はありません。

(function(x ,y) {
   var z = x + y; 
   // do something with z
})(2,3)

呼び出し可能な式にするために、関数を括弧で囲んでいることに注意してください。このパターンは、特定の変数のクロージャーを作成する (状態をキャプチャする) ためによく使用されます。次に例を示します。

jQuery.noConflict(); //Disables the use of $ in the global scope
(function($) {

   //Safely use $ inside this function
   $('.link').click(function(e) {
      //etc
   });

})(jQuery);
于 2011-06-14T09:04:17.893 に答える
1

コードをグループ化演算子で囲むと、関数宣言から関数式に変わります (名前はオプションであり、通常は省略されます)。そのパターンは、「即時に呼び出される関数式」(iife) または「即時に実行される関数式」(iefe) と呼ばれることがよくあります。

一度だけ呼び出される関数宣言を置き換えるために使用されます。これは、モジュール パターンの基本でもあります。

于 2011-06-14T08:32:06.863 に答える