$ (belge). zaten kestirme


245

Aşağıdaki kısayol için $(document).readymi?

(function($){

//some code

})(jQuery);

Bu kalıbın çok kullanıldığını görüyorum, ancak herhangi bir referans bulamıyorum. Eğer kısaysa $(document).ready(), işe yaramamasının belirli bir nedeni var mı? Testlerimde her zaman hazır olaydan önce ateş ediyor gibi görünüyor.


Bahsedilen patern fonksiyonu içinde tanımlanan herhangi bir değişken (örneğin var somevar;), fonksiyonun dışında aynı isimdeki değişkenlerin içeriğini değiştirmeyecektir
Timo Huovinen

3
Kod, $ 'ın o işlev bloğu içindeki jQuery'yi temsil etmesini sağlama etkisine sahiptir, böylece kod jQuery için $ diğer adının devre dışı bırakıldığı veya başka bir şey olarak tanımlandığı yerlere taşınabilir.
AsksAnyway

Yanıtlar:


253

İçin kestirme $(document).ready(handler)IS $(handler)(burada handlerbir fonksiyonudur). Buraya bakın .

Sorunuzdaki kodun hiçbir ilgisi yok .ready(). Aksine, bağımsız değişken olarak jQuery nesnesiyle hemen çağrılan bir işlev ifadesidir (IIFE). Amacı, en azından $değişkenin kapsamını kendi bloğuyla sınırlamaktır, böylece çatışmalara neden olmaz. Bunu sağlamak için genellikle jQuery eklentileri tarafından kullanılan modeli görürsünüz $ == jQuery.


14
Teknik olarak hemen çağrılan bir işlev ifadesidir . Kendini çağırsaydı, kendini kendi içinden çağırırdı. Web'de arama yapın iifeveya Cowboy Alman'ın ünlü blog gönderisini atlayın . Detaylar ... sheesh.
2540625

546

Kısayol:

$(function() {
    // Code here
});

24
İlk argüman $. Bunu eklemek isteyebilir. jQuery(function($, undefined) {});
Raynos

5
@raynos Gerekli değil. yukarıdaki kod bir takma ad olarak iyi çalışır$(document).ready(function(){ });
Kyle Trauberman

10
Sadece $ilk argüman olarak özgür olduğunuzu bilmek faydalıdır .
Raynos

3
Hala bu cevabı ayda bir kez ziyaret ediyorum.
Nugsson

89

Doğru steno şu:

$(function() {
    // this behaves as if within document.ready
});

Gönderdiğiniz kod…

(function($){

//some code

})(jQuery);

… Anonim bir işlev yaratır jQueryve arg olarak iletilmesiyle hemen yürütür $. Etkin bir şekilde yaptığı, fonksiyonun içindeki kodu alıp normal gibi yürütmektir, çünkü $zaten bir takma addır jQuery. : D


4
Ayrıca, takma ad olarak $ da kullanan diğer araçlar yüklüyse, $ 'ın jQuery için takma ad olmasını da sağladığını söyleyebilirsiniz
Jim Wolff


12

Bu özel çizgiler jQuery eklentileri için olağan sarmalayıcılardır:

"... eklentinizin dolar işareti kullanabilen diğer kütüphanelerle çarpışmadığından emin olmak için jQuery'yi dolar işareti ile eşleştiren kendi kendini yürütme işlevine (kapanış) geçirmek en iyi yöntemdir. t yürütülmesi kapsamında başka bir kütüphane tarafından üzerine yazılamaz. "

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );

Gönderen http://docs.jquery.com/Plugins/Authoring


11

Çok çerçeveli hazır kasa kısayolu:

jQuery(function($, undefined) {
    // $ is guaranteed to be short for jQuery in this scope
    // undefined is provided because it could have been overwritten elsewhere
});

Çünkü jQuery $ve undefineddeğişkenlerini kullanan tek çerçeve değildir


Ayrıca şu şekilde de yazılabilir(function($){ ... })(jQuery);
Mike Causer

2
@MikeCauser da iyi bir yaklaşım, ancak çağrılmayacak ready, bunun yerine hemen çağrıldı
Timo Huovinen

5

Daha kısa varyant bile kullanmaktır

$(()=>{

});

burada $jQuery anlamına gelir ve kapanıştan miras alan 'ok işlevi' olarak()=>{} adlandırılır . (Böylece muhtemelen yerine sahip olacaksınız .)thisthiswindowdocument


0

Peki buna ne dersin?

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.