次の省略形$(document).ready
ですか?
(function($){
//some code
})(jQuery);
このパターンが頻繁に使用されているのを確認しましたが、それに対する参照を見つけることができません。の省略形である場合$(document).ready()
、機能しない特別な理由はありますか?私のテストでは、readyイベントの前に常に起動するようです。
次の省略形$(document).ready
ですか?
(function($){
//some code
})(jQuery);
このパターンが頻繁に使用されているのを確認しましたが、それに対する参照を見つけることができません。の省略形である場合$(document).ready()
、機能しない特別な理由はありますか?私のテストでは、readyイベントの前に常に起動するようです。
回答:
の省略形$(document).ready(handler)
は$(handler)
(handler
関数はです)です。こちらをご覧ください。
あなたの質問のコードはとは何の関係もありません.ready()
。むしろ、jQueryオブジェクトを引数として持つ、即時に呼び出される関数式(IIFE)です。その目的は、少なくとも$
変数のスコープをそれ自体のブロックに制限して、競合を引き起こさないようにすることです。通常、jQueryプラグインが使用するパターンを確認して、それを確認し$ == jQuery
ます。
iife
か、カウボーイアルマンの有名なブログ投稿にスキップしてください。詳細…
略記は次のとおりです。
$(function() {
// Code here
});
$
です。それを追加したいと思うかもしれません。それは役に立ちますjQuery(function($, undefined) {});
$(document).ready(function(){ });
$
最初の引数として無料で入手できることを知っておくと便利です。
正しい速記は次のとおりです。
$(function() {
// this behaves as if within document.ready
});
あなたが投稿したコード…
(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プラグインの通常のラッパーです。
「...プラグインがドル記号を使用する可能性のある他のライブラリと衝突しないようにするには、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
});
これは、jQueryが$
and undefined
変数を使用する唯一のフレームワークではないためです
(function($){ ... })(jQuery);
ready
。代わりにすぐに呼び出されます
さらに短いバリアントを使用することです
$(()=>{
});
ここで$
、jQueryを表し、クロージャーから継承する()=>{}
いわゆる「矢印関数」ですthis
。(それでthis
あなたはおそらくあなたのwindow
代わりに持っているでしょうdocument
。)
var somevar;
)内で定義された変数は、関数外の同じ名前の変数の内容を変更しません