0

次の 2 つのスニペットがあるとします。

$.ready(function()
{
     ……
}

(function($){
  $(function(){

    ……

  });
})(jQuery);

最初の形式を使用しているようですが、機能しないので、それらの違いは何ですか?

<script src="" />また、をページの一番下に置くことと を入れることには違いがありheadますか?

4

3 に答える 3

3

2 つの違いは、最初の仮定jQueryが variable に設定されていることです$。2番目はそうではありません。

$2 つ目は、関数へのパラメーターとしてサンドボックスで定義し、jQueryそのパラメーターを渡します。これは、 noConflictモード$であっても省略形を使用する一般的な方法です。

(function($){  // <----- $ is defined ONLY within THIS function
  $(function(){
    ……
  });
})(jQuery);    // <------- jQuery being passed in for $
于 2013-10-03T03:28:46.603 に答える
2

とりわけ違いは、これら 2 つが異なる機能であることです。

  • jQuery.ready準備完了イベントをトリガーする内部メソッドです。引数として関数を期待するのではなく、ブール値を期待します。

  • $(function)は、準備が整ったイベント ハンドラ (つまり、DOM がロードされたときに実行する必要がある関数) をバインドするAPI メソッドjQuery.fn.readyである のショートカットです。

したがって、最初のものは「うまくいきません」。.readyドキュメントを読むことをお勧めします。

2 番目がすぐに呼び出される関数式でラップされているという事実は、機能に影響を与えません。

また、ページの一番下に置くのと、頭に置くのとでは違いはあり<script src="" />ますか?

ハンドラーを準備完了イベントにバインドすることについて話していると仮定すると、いいえ、実行に関して違いはありません。


リンクをたどりたくない人のために:

jQuery.ready:

// Handle when the DOM is ready
ready: function( wait ) {

    // Abort if there are pending holds or we're already ready
    if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
        return;
    }

    // Remember that the DOM is ready
    jQuery.isReady = true;

    // If a normal DOM Ready event fired, decrement, and wait if need be
    if ( wait !== true && --jQuery.readyWait > 0 ) {
        return;
    }

    // If there are functions bound, to execute
    readyList.resolveWith( document, [ jQuery ] );

    // Trigger any bound ready events
    if ( jQuery.fn.trigger ) {
        jQuery( document ).trigger("ready").off("ready");
    }
},

jQuery.fn.ready:

ready: function( fn ) {  
    // Add the callback
    jQuery.ready.promise().done( fn );

    return this;
},
于 2013-10-03T03:35:59.637 に答える
0

最後の質問に答えるには:

ページの下部に JavaScript を配置すると、実行前にページの HTML が読み込まれます。ページの下部に JavaScript ファイルを含めると、私の知る限り、他のすべてのファイルの最後にロードする順序が置かれます。

最初のスニペットを使用する方が適切ですが、提供したスニペットは実行時に同一である必要があります。2 番目の感じ. 冗長です。

于 2013-10-03T03:27:16.137 に答える