次の 2 つのスニペットがあるとします。
$.ready(function()
{
……
}
と
(function($){
$(function(){
……
});
})(jQuery);
最初の形式を使用しているようですが、機能しないので、それらの違いは何ですか?
<script src="" />
また、をページの一番下に置くことと を入れることには違いがありhead
ますか?
次の 2 つのスニペットがあるとします。
$.ready(function()
{
……
}
と
(function($){
$(function(){
……
});
})(jQuery);
最初の形式を使用しているようですが、機能しないので、それらの違いは何ですか?
<script src="" />
また、をページの一番下に置くことと を入れることには違いがありhead
ますか?
2 つの違いは、最初の仮定jQuery
が variable に設定されていることです$
。2番目はそうではありません。
$
2 つ目は、関数へのパラメーターとしてサンドボックスで定義し、jQuery
そのパラメーターを渡します。これは、 noConflictモード$
であっても省略形を使用する一般的な方法です。
(function($){ // <----- $ is defined ONLY within THIS function
$(function(){
……
});
})(jQuery); // <------- jQuery being passed in for $
とりわけ違いは、これら 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;
},
最後の質問に答えるには:
ページの下部に JavaScript を配置すると、実行前にページの HTML が読み込まれます。ページの下部に JavaScript ファイルを含めると、私の知る限り、他のすべてのファイルの最後にロードする順序が置かれます。
最初のスニペットを使用する方が適切ですが、提供したスニペットは実行時に同一である必要があります。2 番目の感じ. 冗長です。