42

違いは何ですか -

初め :-

(function () {

    var Book = 'hello';

}());

2番:-

(function () {

    var Book = 'hello';

})();

1番目と2番目は、仕事の仕方が似ています..

三番 :-

(function ($) {

    var Book = 'hello';

})(jQuery);

どのパターンを使用する必要があり、コーディングのどこで.. backboneJS に関連する記事を読んでいるときに見た 3 番目のモジュール パターン。

3つ目の「引数「jQuery」を持つ自己実行関数」でわかったことは……。

即時呼び出し関数式(IIFE)について何か考えを教えてください。

ありがとう !!

4

9 に答える 9

29

すべての場合において、匿名関数を実行しています。1 は 2 と同じだと思います。3 番目のケースでは、引数として jQuery を渡しています。これは、関数のスコープ内で jQuery をカプセル化する場合に行います。

たとえば、アプリケーションでは、jQuery var が jQuery である可能性があります。しかし、無名関数内では $ として使用したい場合があります。

(function ($) {
    //Here jQuery is $
    var Book = $(document.body).text();    

})(jQuery);

//Out of your function, you user jQuery as jQuery (in this example)
var Book = jQuery(document.body).text();
于 2013-10-21T10:16:35.607 に答える
9

mootoolsこれは、使用しているなどの他のライブラリとの競合を避けるためにクロージャーと呼ばれ$ます。$このようにして、パラメーターとして渡すことで、その関数で確実に使用できますjQuery

(function ($) {
   $(function () { // Here in this block you can use '$' in place of jQuery
    .......
   });
})(jQuery); //<----passing jquery to avoid any conflict with other libraries.
于 2013-10-21T10:29:22.693 に答える
5

他の回答が指摘したように、それらはすべて自己実行匿名関数または即時匿名関数です。

3 番目の例は、関数外の変数のエイリアスを作成するために使用されます。これは、名前の競合を防ぎ、関数で使用されるモジュールを簡単に変更できるコードを作成するための良い方法です。これは基本的に、依存性注入の一種です。

(function (doc, win, $, myModule) {
    // Code
}(document, window, jQuery, window.MYAPP.myModule));

docwin$およびmyModuleは、注入された変数です。このパターンでは、注入されたコンポーネントを変更するのは簡単です。このような

(function (doc, win, $, myModule) {
    // Code
}(document, window, jQuery, window.MYAPP.myModule2)); //Use myModule2 instead myModule
于 2013-10-21T10:23:34.133 に答える
3

3 つの例はすべて、即時呼び出し関数式( IIFE ) です。

唯一の違いは、3 番目の例jQueryでは変数として渡され、ドルの命名規則を使用して IIFE 内で使用できるようになっていることです。例えば

(function ($) {
  var Book = 'hello';
  $('#bookelement').html(Book);
})(jQuery);
于 2013-10-21T10:17:39.070 に答える
1

これらはすべて自己実行機能です。現在では、即時呼び出し関数式 (IIFE) としても知られています。

最初の 2 つはまったく同じですが、構文がわずかに異なります。3 番目は、parameterjQuery オブジェクトとして渡します。

于 2013-10-21T10:17:15.837 に答える
0

実際、3 つすべてが自己実行関数であり、ti は実際に何をする必要があるかによって異なります。

違いは 3 の間だけです。1 と 2 は同じです。

3 との違いは、引数として jquery への参照を渡していることです。これで、この annoyomus 関数内のすべての関数が jque にアクセスできるようになりました

于 2013-10-21T10:18:01.893 に答える