次の略記は$(document).ready
?
(function($){
//some code
})(jQuery);
このパターンはよく使われているようですが、それへの参照を見つけることができません。の省略形である場合、それ$(document).ready()
が機能しない可能性がある特別な理由はありますか?私のテストでは、準備完了イベントの前に常に起動するようです。
次の略記は$(document).ready
?
(function($){
//some code
})(jQuery);
このパターンはよく使われているようですが、それへの参照を見つけることができません。の省略形である場合、それ$(document).ready()
が機能しない可能性がある特別な理由はありますか?私のテストでは、準備完了イベントの前に常に起動するようです。
省略形は次のとおりです。
$(function() {
// Code here
});
の省略形は$(document).ready(handler)
です$(handler)
(ここhandler
で、は関数です)。ここを参照してください。
あなたの質問のコードはとは何の関係もありません.ready()
。むしろ、これは、引数としてjQueryオブジェクトを使用した即時呼び出し関数式(IIFE)です。その目的は、少なくとも$
変数のスコープをそれ自体のブロックに制限して、競合を引き起こさないようにすることです。通常、jQueryプラグインがそれを確実にするために使用するパターンが表示されます$ == jQuery
。
正しい省略形は次のとおりです。
$(function() {
// this behaves as if within document.ready
});
投稿したコード…</p>
(function($){
//some code
})(jQuery);
…無名関数を作成しjQuery
、argとして渡されてすぐに実行し$
ます。$
はすでにのエイリアスであるため、効果的に実行するのは、関数内のコードを取得して通常のように実行することだけですjQuery
。:D
これはの省略形ではありません$(document).ready()
。
投稿したコードは内部コードをボックス化し$
、グローバル名前空間を汚染することなくjQueryを利用できるようにします。これは、1つのページでプロトタイプとjQueryの両方を使用する場合に使用できます。
ここに記載されています:http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression
さらに短いバリアントを使用することです
$(()=>{
});
ここで$
、jQueryを表し、クロージャーから継承する()=>{}
いわゆる「矢印関数」です。this
(そのため、this
おそらくwindow
の代わりになりdocument
ます。)
これらの特定の行は、jQueryプラグインの通常のラッパーです。
「...プラグインがドル記号を使用する可能性のある他のライブラリと衝突しないようにするために、jQueryをドル記号にマップする自己実行関数(クロージャ)に渡して、プラグインを実行できるようにすることをお勧めします。」実行範囲内で別のライブラリによって上書きされることはありません。」
(function( $ ){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})( jQuery );
準備のためのマルチフレームワークの安全な速記は次のとおりです。
jQuery(function($, undefined) {
// $ is guaranteed to be short for jQuery in this scope
// undefined is provided because it could have been overwritten elsewhere
});
これは、$
とundefined
変数を使用するフレームワークがjQueryだけではないためです。
これはどうですか?
(function($) {
$(function() {
// more code using $ as alias to jQuery
// will be fired when document is ready
});
})(jQuery);