5

$(function( $ )のようなコードは意味がないことは知っていますが、 todomvcを含むさまざまな場所でこの種のコードを見つけました。

他のライブラリjQuery(function( $ )で使用される可能性のある競合を解決するように関数を作成するのには理由がありますが、ではありません。 $$function($)

4

10 に答える 10

4

使用する理由はありません

$(function($))...

行の先頭でドル記号を使用する場合、それはjQueryオブジェクトであると信頼しているので、競合を避けるために後でjQueryオブジェクトをパラメーターとして渡す場合、そもそもそれを使用しなかったのはなぜですか?今は遅すぎます...

それを使用する正しい方法は次のとおりです。

(function($){ // The dollar variable is a parameter.
   $(function(){ // You use the $ variable only inside the function.
   });
})(jQuery); // jQuery is passed as a parameter.

$.somePrototypeFunctionHere(); // Here the dollar variable can be something else.
于 2013-02-14T06:42:23.043 に答える
3

無駄だ

このフォームはまったく役に立ちません。

$(function($) {
});

オーバーライドできるライブラリが他にない場合にのみ機能します$(プロトタイプなど)。

どのように役立つか

jQueryはそれ自体をDOMreadyイベントハンドラー関数の最初の引数として渡すので、これをうまく利用する方法は次のとおりです。

jQuery(function($) {
    // this === document
    // $ === jQuery
});

この動作の証拠は、ソースもあります。

readyList.resolveWith( document, [ jQuery ] );

これはにマップthisdocumentれ、ready関数の最初の引数はにマップされますjQuery。コードが少しわかりにくいように見える理由は、readyイベントがを使用して処理されるためDeferredです。

同等のもの

やや同等の表記法は次のとおりです。

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

これは、readyハンドラーの外部でより多くのことを実行している場合に推奨されます。これは、実際には思ったよりも頻繁に発生します。

于 2013-02-14T06:41:53.060 に答える
2

DOMのjQueryスクリプトの準備ができたら、それを初期化する方法はたくさんあります。一般的な方法は次のとおりです。

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

そして、同じことの省略形は次のとおりです。

$(function(){});

アップデート#1:$()対戦jQuery()

質問するjQuery理由$と、理由は、ほとんどのライブラリがライブラリ$内の関数にアクセスするためのより短い方法として使用するためです。言う、MooToolsとプロトタイプJS。したがって、競合を回避するために、それら$を。に置き換える場合がありjQueryます。

jQueryには、 jQueryによる変数jQuery.noConflict();の制御を放棄してjQueryで機能しないようにするという関数があります。これで問題が解決することを願っています。$$

Prototype.JSドキュメントでは、$シンボルは一致するIDを持つドキュメント内の要素を返します。それ以外の場合は、渡された要素を返します。

また、この$機能はプロトタイプの要です。の便利なエイリアスを提供するだけでなくdocument.getElementById、ID(文字列)またはDOMノード参照を関数に無差別に渡すこともできます。


アップデート#2:$パラメータとしての質問について...

誰も使用しません:

$(function($){})

どちらかです

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

また

$(function(){});

チェックしてください。:)

于 2013-02-14T06:37:24.170 に答える
1

書く人のほとんど$(function(){})は、ユーザーだからです。つまり、競合するライブラリではなく、jqueryを使用することを選択しました。したがって、安全に使用できます。

于 2013-02-14T06:38:29.173 に答える
1
$(function( $ ) 

の省略形です

$(document).ready(function() {

そしてあなたは正しいです: Jquery(function( $ )jqueryや他のjsライブラリとの競合の可能性がある場合に使用されます

于 2013-02-14T06:38:46.190 に答える
1

$はい。プロトタイプも使用していることをご存知かもしれませんがjQuery、$が他のライブラリによって保持されている場合でも、jQueryを使用できるようになりました。

ここをチェック

他のライブラリでのjQueryの使用

于 2013-02-14T06:38:58.503 に答える
0

これは、次の潜在的な競合を解決するためのより良い方法です$

(function($){
   $(function(){
      // all the code stuff here....
   });
})(jQuery);

あなたの編集:
My question is actually misunderstood by many giving answers. I want to know about the dollar as an argument in the function.

$これは略記の標識を確保するためだけのものでjQueryあり、標識を使用している図書館は他にもたくさんある$ので、トラブルに巻き込まれる可能性が高いです。

ドキュメントからここを読んでください:

jQueryをドル記号にマップするIIFE(即時呼び出し関数式)に渡すことをお勧めします。これにより、実行範囲内で別のライブラリによって上書きされないようになります。

(function($) {
     // all other things    
})(jQuery);

これで、そのクロージャ内で、jQueryの代わりにドル記号を好きなだけ使用できます。

詳細はこちら

于 2013-02-14T06:39:26.367 に答える
0
$(function() { 
  // Do your code here...
}); 

ドキュメントとスクリプトが完全にダウンロードされていることを確認します。

(function($){ 
  // Do your code here...
})(jQuery); 

$シンボルに異なる意味を与える他のライブラリと競合することなく、関数で$シンボルを使用できるようにします。

したがって、上記の両方を一緒に使用できます。

(function($){ 
   $(function() { 
      // Do your code here... 
   }); 
})(jQuery);
于 2013-02-14T06:45:19.743 に答える
0

ready()から| jQuery

jQuery名前空間のエイリアス

$.noConflict()別のJavaScriptライブラリを使用する場合は、名前空間の問題を回避するために呼び出すことをお勧めします。この関数が呼び出されると、$ショートカットは使用できなくなり、jQuery通常はを書き込むたびに書き込む必要があります$。ただし、メソッドに渡されるハンドラーは.ready()、グローバルjQueryオブジェクトに渡される引数を取ることができます。これは、.ready()他のコードに影響を与えることなく、ハンドラーのコンテキスト内でオブジェクトの名前を変更できることを意味します。

jQuery(document).ready(function($) {
  // Code using $ as usual goes here.
});

これは、DOMが完全にロードされたときに実行する関数を指定する他の方法です。jQueryでは3つの方法で実行できます-

次の3つの構文はすべて同等です。

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

jQuery().ready(function($){}) //(this is not recommended)

jQuery(function($){})

競合を解決する別の方法は次のとおりです-

(function($) { /* some code that uses $ */ })(jQuery)

あなたはこれを読みたいかもしれません。

于 2013-02-14T06:58:58.293 に答える
0

あなたの質問は明確ではありません。オブジェクトを渡すJQueryと、ローカルスコープになります(私が理解している限り、モジュールに対して)。これは、パフォーマンスの向上として使用されます。

(function($) {
  // Code in here
})(jQuery);
于 2013-02-14T07:02:23.170 に答える