2011-10-26 4 views
2

これを行うと、$シンボルを使用する他のライブラリとの競合を避けることができます。

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

誰かが私にそれを説明できますか?

答えて

4

匿名関数を定義する引数は、$です。その後すぐに、jQueryオブジェクト(その名前は他のライブラリオブジェクトの名前と衝突しないように明示的に指定されています)を使用して呼び出します。

したがって、匿名関数(すべてのjQueryコードがあります)の範囲内で、$jQueryオブジェクトを参照します。したがって皆さんは喜んでいます。便利な略式コード$を使用し、コードは後で$を自分のビジネスに使うことができます。

1

他のライブラリは$を他の目的で使用することがあります。あなたはまだ

jQuery.noConflict(); 

を呼び出す必要があります

あなたはここで多くを読むことができます:http://api.jquery.com/jQuery.noConflict/

0

$はjQueryオブジェクトを表します。他のライブラリでは、オブジェクトを表すのに$も使用されています。したがって、jQueryプラグインをロードすると、間違った$オブジェクトを変更しようとする可能性があります。

あなたはこれを回避するためにjQuery.noConflict()を使用することができます:http://api.jquery.com/jQuery.noConflict/

0

はい、$を使用して(例えば、プロトタイプ)他のライブラリに干渉することができます。

コードスニペットでは、即時関数を定義して呼び出し、パラメータとしてjQueryを渡します。 (jQueryはjQueryの最上位オブジェクトで、矛盾がない場合は$

jQueryは、関数の$パラメータにバインドされています。 JavaScript関数は独自のスコープを作成するので、関数パラメーター(およびローカル変数はvarと宣言されています)は、同じ名前のグローバル変数をすべてオーバーライドします。

$の唯一の値は、関数の継続時間に矛盾がないように、jQueryにバインドされたパラメータです。

1

jQuery.noconflictも使用する必要があります。

通常、jQueryを使用すると、$という名前のグローバル関数が定義されます。 jQueryは、$という以前の値も記憶しています。つまり、別のライブラリによって定義されたグローバル$関数のようです。

noconflictを呼び出すと、jQueryは以前の(記憶された)値$を復元します。しかし今では$を使用してjQueryを使用することはできません - 関数名jQueryしか使用できませんが、それはもっと冗長です。それであなたの質問にあなたが言及したコードが入ります。

このコードでは、$を使用して、グローバル$の値を置き換えずに、定義している匿名関数の範囲でjQueryを呼び出すことができます。関数は、ローカル変数とパラメータに対して別のスコープまたは名前空間を作成します。あなたが投稿したコードは同等です:

function init() { 
    var $ = window.jQuery; 
    // do stuff with $ 
} 
init(); 

DOMは$にパラメータとして渡して準備ができたときにコールバックが呼び出されるよう初期化関数を登録するための一般的なショートカット:

$(function() { 
    // code 
}); 

ライブラリの競合を防ぐ必要がある場合に2つの匿名関数をネストする必要を避けるため、jQuery関数はこのコールバックのパラメータとして自身を渡すので、これを行うことができます:

jQuery(function($) { 
    // $ is jQuery here 
}); 
関連する問題