1

jqueryを書く前に、彼らは常に私たちを使用することをお勧めします

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

すべてのコードをこの関数内に配置しますが、特定のチュートリアルでは代わりにこれを使用していることに気付きました

(function($){})(jQuery)

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

実際の違いは何ですか?

4

4 に答える 4

4
$( document ).ready(function() { YOUR CODE });

YOUR CODE1. このコードは、jQuery の on document ready ハンドラーでラップされます。これにより、スクリプトの実行を開始する前に、すべての HTML が確実に読み込まれます。また、YOUR CODE匿名関数 (クロージャー) の一部であるため、これによりグローバル スコープがクリーンに保たれます。

...

$(function(){ YOUR CODE });

2. これは #1 と同じですが、省略形を使用しています。

...

(function($){ YOUR CODE })(jQuery)

3. これは、on ready ハンドラーに何もラップしないため、これまでに読み込まれた HTML に関係なく、すぐに実行されます。ただし、匿名関数でラップされているYOUR CODEため、jQuery オブジェクトを で参照できます$

...

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

4. これは #3 と同じです。

于 2013-06-17T05:27:00.623 に答える
2
$(document).ready(function() {//when document is read

$(function() {

は同じもので、2 番目は単なる省略形です

あなたもできる

$(window).load(function() {

//ウィンドウ読み込みイベントは、すべてのフレーム、オブジェクト、および画像を含む完全なページが完全に読み込まれる少し後に実行されます。

(function($){})(jQuery)

自己実行匿名関数です

したがって、基本的には、jQuery が $ 変数/関数を持つ可能性のある他の JavaScript ライブラリとうまく連携できるようにする匿名関数です。また、すべての jQuery プラグイン コードがこの無名関数でラップされていることにも注意してください。

于 2013-06-17T05:17:45.283 に答える
0

最初のものは、メソッドを で実行しdocument readyます。詳細はこちらをご覧ください

(function($){/*Your code*/})(jQuery)

最後の 2 つは、コード内の変数/関数宣言をローカル スコープにカプセル化し、jQuery オブジェクトをパラメーターとして取得します。このアプローチは、宣言でグローバルスコープを散らかさないために使用されます。つまり、変数をローカライズします。

最後の 2 つの違いは、最初の 1 つが追加の括弧で関数を区切っており、視覚的にわかりやすくしていることです。

基本的に、これはJavaScript でモジュールを構築する方法であり、コードの 1 つのブロックが他のブロックに影響を与えないようにします。

詳細については、js 開発パターンに関する優れた記事を参照してください。

例:

var f = function (str) {
   window.alert(str);
};

var name = "John Doe";

f();

機能的には同じです

(function (w) {
    var f = function (str) {
       w.alert(str);
    };

    var name = "John Doe";

    f();
})(window);

ご覧のとおり、最初のものはグローバル スコープで変数を作成し、他のスクリプトに影響を与える可能性がありますが、2 つ目はすべてをローカルで行います。さらに、2 番目の例では、参照の名前を に変更し、windowを介してメソッドで使用できるようにしましたw。あなたの例でも同じことが起こります。

2 つの js ライブラリがあり、両方ともエイリアスの省略形を使用していると想像してください$。コードのどこで参照されるかはわかりません。一方、jQuery常にjQueryライブラリを参照します。そして、あなたの場合、最後の2つのメソッドは、それ$が名前が変更されたjQueryオブジェクトであり、別のライブラリからのものではないことを確認するだけです.

于 2013-06-17T05:16:48.260 に答える
0

最初のものはドキュメントの準備が整う$とすぐに関数を実行し、他のものはその関数内のエイリアス記号を介して jQuery にアクセスできるようにする IIFE のものです。

var $ = 'other plugin';
(function($){
    alert($); // jQuery here
})(jQuery);
于 2013-06-17T05:40:20.970 に答える