2

これはjQueryコードですか

(function(jQuery){
})(jQuery);

に相当

$(document).ready(function () {
});

はいの場合、2 つの違いは何ですか? そうでない場合、最初は何をしますか?

編集:

みんなありがとう。ほとんどの反応は、さまざまなフレーバーとサンプルで類似しています

4

5 に答える 5

5

それらは同等ではありません。

最初の例は、即時呼び出し関数式 (IIFE)です。ローカルに定義された変数の周りにクロージャーを作成します。

2 番目の例では、DOM が完全にロードされたときに実行する関数を指定しています。囲まれたコードを実行する前に、DOM 内のすべての要素ノードが使用可能であることを確認するために使用されます。これも閉鎖です。

どちらの例も無名関数を使用しています。

次のように、両方の例を使用することをお勧めします。

(function($){
    // locally-scoped, DOM-is-NOT-Ready-code here.
    $(function () {
        // your locally-scoped, DOM-is-ready-code here.
    });
}(jQuery)); // note that I've moved the invocation into the parens
            // that contain the function.  This makes JSLint happy!
于 2010-12-16T23:43:16.807 に答える
3

絶対にそうではありません.1つ目は自己実行型の無名関数であり、2つ目はreadyハンドラーです.

(function(jQuery){
  //jQuery in this scope is referencing whatever is passed-in
})(jQuery);

したがって、関数のjQuery内部は関数の外部と必ずしも同じではありませんjQuery。しかし、通常、グローバル変数名とローカル変数名を混在させたくはありません。

次の例を見てください。

(function(obj) {
   alert(obj);
})('Hello');

これは関数を定義し、すぐにそれを呼び出し、「Hello」を渡します

于 2010-12-16T23:43:00.507 に答える
3
$(document).ready(function () {

});

これと同等です:

$(function() {

});

最初のスニペットは、ローカル スコープを作成する、すぐに呼び出される無名関数です。

(function() {
    var x = 2;
})();

alert(x); // undefined
于 2010-12-16T23:43:47.803 に答える
2

いいえ、最初のものはあまり効果がありません。内部の変数を周囲のスコープから分離し、内部にローカルjQuery変数を作成するだけです。

2 つ目は、DOM の準備が整った後 (つまり、がロードされた後)実行される関数を渡します。<body>

以下に相当する一般的なもの:

$(document).ready(function () {
});

は:

$(function () {
});

これは同じことをします。

これの間:

(function(jQuery){
})(jQuery);

多くの場合、次のように書かれています。

(function($){
})(jQuery);

$変数がグローバル変数ではなくなるようにします。$グローバル変数が既に使用されている場合に役立ちます。

于 2010-12-16T23:43:36.697 に答える
1

全くない。1 つ目はクロージャーです。これは、作成してすぐに呼び出す関数です。ただし、通常は次のように 2 つを組み合わせます。


  (function($) {
    // use the $ variable
    $(document).ready(function(){
      // ...
    });
  })(jQuery);

クロージャーを作成することで、そのコード ブロックのローカルで "jQuery" を "$" に名前変更します。クロージャー構文を使用する理由は、$ 変数がグローバル スコープで jQuery オブジェクトとして定義されていなくても使用できるようにするためです (つまり、prototype などの一部の JavaScript フレームワークでは $ を変数として使用します)。

jQuery プラグインを作成するときはいつでも、他の JavaScript フレームワークに干渉しないように、すべての jQuery コードをこの種のクロージャーで囲む必要があります。プラグインを作成しておらず、他の JavaScript フレームワークも使用していない場合は、コードをわざわざクロージャーで囲む必要はないでしょう。

于 2010-12-16T23:57:57.523 に答える