これはjQueryコードですか
(function(jQuery){
})(jQuery);
に相当
$(document).ready(function () {
});
はいの場合、2 つの違いは何ですか? そうでない場合、最初は何をしますか?
編集:
みんなありがとう。ほとんどの反応は、さまざまなフレーバーとサンプルで類似しています
これはjQueryコードですか
(function(jQuery){
})(jQuery);
に相当
$(document).ready(function () {
});
はいの場合、2 つの違いは何ですか? そうでない場合、最初は何をしますか?
編集:
みんなありがとう。ほとんどの反応は、さまざまなフレーバーとサンプルで類似しています
それらは同等ではありません。
最初の例は、即時呼び出し関数式 (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!
絶対にそうではありません.1つ目は自己実行型の無名関数であり、2つ目はready
ハンドラーです.
(function(jQuery){
//jQuery in this scope is referencing whatever is passed-in
})(jQuery);
したがって、関数のjQuery
内部は関数の外部と必ずしも同じではありませんjQuery
。しかし、通常、グローバル変数名とローカル変数名を混在させたくはありません。
次の例を見てください。
(function(obj) {
alert(obj);
})('Hello');
これは関数を定義し、すぐにそれを呼び出し、「Hello」を渡します
$(document).ready(function () {
});
これと同等です:
$(function() {
});
最初のスニペットは、ローカル スコープを作成する、すぐに呼び出される無名関数です。
(function() {
var x = 2;
})();
alert(x); // undefined
いいえ、最初のものはあまり効果がありません。内部の変数を周囲のスコープから分離し、内部にローカルjQuery
変数を作成するだけです。
2 つ目は、DOM の準備が整った後 (つまり、がロードされた後)に実行される関数を渡します。<body>
以下に相当する一般的なもの:
$(document).ready(function () {
});
は:
$(function () {
});
これは同じことをします。
これの間:
(function(jQuery){
})(jQuery);
多くの場合、次のように書かれています。
(function($){
})(jQuery);
$
変数がグローバル変数ではなくなるようにします。$
グローバル変数が既に使用されている場合に役立ちます。
全くない。1 つ目はクロージャーです。これは、作成してすぐに呼び出す関数です。ただし、通常は次のように 2 つを組み合わせます。
(function($) {
// use the $ variable
$(document).ready(function(){
// ...
});
})(jQuery);
クロージャーを作成することで、そのコード ブロックのローカルで "jQuery" を "$" に名前変更します。クロージャー構文を使用する理由は、$ 変数がグローバル スコープで jQuery オブジェクトとして定義されていなくても使用できるようにするためです (つまり、prototype などの一部の JavaScript フレームワークでは $ を変数として使用します)。
jQuery プラグインを作成するときはいつでも、他の JavaScript フレームワークに干渉しないように、すべての jQuery コードをこの種のクロージャーで囲む必要があります。プラグインを作成しておらず、他の JavaScript フレームワークも使用していない場合は、コードをわざわざクロージャーで囲む必要はないでしょう。