0

重複の可能性:
関数宣言の後の空の括弧()はjavascriptで何をしますか?

私は基本的にJavascriptがどのように機能するかを理解しています。今、私は他のプログラマーの仕事を経験することによってJavascriptデザインパターンを独学しています、そして私はこれに出くわします

  var $a = (function() {
    var a..... //assigning values & functions to variables 
    return { init : init }; //in the variable above there is "init" 
  })();
  $a.init();

$a.init()上記のプロパティと機能を持つオブジェクトが作成されていることがわかります。しかし、それが実際にどのように機能するのかわかりません。

なぜ関数はこのように書かれているの(function() { })()ですか?

上記の機能がすでにあるのになぜreturn {init: init}必要なのですか?init

これはどのようなパターンですか?

4

3 に答える 3

2

これは共通のモジュール パターンです。

これ

  var $a = (function() {
     var a..... //assigning values & functions to variables 
     var init = function() {... uses a};
     return { init : init }; //in the variable above there is "init" 
  })();
  $a.init();

やっているようなものです

var a..... //assigning values & functions to variables 
var $a = { init : function(){... uses a} }; //in the variable above there is "init" 
$a.init();

aただし、プライベートであり(アクセスを許可する関数がない場合は読み書きできない)、グローバル名前空間を妨げないという利点があります。同じ理由で、ローカルで宣言されinitた関数は、返されたオブジェクトで宣言する必要があります。

于 2013-01-07T16:56:29.217 に答える
1
(function() {
})();

IIFE即時呼び出し関数式と呼ばれます。基本的には、明示的に呼び出さなくてもすぐに実行される関数です。関数を囲む括弧は宣言を式に変換しており()、最後の空の部分は に渡されるパラメーターIIFEです。

$aこれは、init と呼ばれるメソッドを持つオブジェクトであり、init とも呼ばれる IIFE 内の関数を呼び出します。

return { init : init };
                 /\ the name of the method which is called internally
          /\ the name of the method which is returned from the function

これは、Javascript をモジュール化し、ある種のプライバシーを作成する一般的な方法です (JavaScript には他の言語のようにデフォルトでプライバシーがないため、これは簡単なことではありません)。
このように、javascript の他の部分は、return ステートメントで宣言したプロパティにのみアクセスできますが、IIFE で宣言した内部のものにはアクセスできません。

于 2013-01-07T16:55:47.257 に答える
0

余分な括弧は、この関数がすぐに呼び出されることを意味します。これは、内部のすべてが実行され、その関数の戻り値が $a の値になることを意味します。

あなたの例では、 $a にはオブジェクト { init: init} が含まれています

余分なブラケットを省略すると、呼び出すことができる新しい関数を宣言する必要があります。

すぐに呼び出される関数式の詳細については、こちらをご覧ください

于 2013-01-07T16:56:45.363 に答える