2010-10-02 34 views
7

Kısa bir süre önce JavaScript'i daha ayrıntılı olarak incelemeye başladım ve JQuery'deki bu kod yapısına rastladım.jquery kaynak kodunu anlama

(function(window, undefined) { 
})(window) 

yığın taşması üzerine Okuma (ve başka yerlerde) Bunun, benim varsayım düzeltmek muyum

function foo(window, undefined) { 
    ... 
} 

foo(window); 

aynı olduğunu sonucuna vardık? Eğer öyleyse, eski avantajları nelerdir? (kafa karıştırıcı yeniler dışındakiler)

+0

http://stackoverflow.com/questions/2716069/how-does-this-javascript-jquery-syntax-work-function-window-undefined – user113716

+1

Kayıt için, bu kodda hiçbir jQuery yoktur, sadece bir düz javascript. –

+1

Jquery'yi anlamaya çalışıyorum; kullanmıyor ama gerçek jquery kaynağı, ve bu yapıyı ilk defa gördüğüm yer burası. – Elija

cevap

5

Bu anonim bir işlevdir. Bu oluşturulur ve daha sonra kapsamı, buradaki avantajı gider. Hemen yaratılır ve örneklendirilir. Bu konuda iyi olan şey, küresel ad alanı üzerindeki herhangi bir işlevle çakışmayacak olması ve bu yüzden sayfada yer alan herhangi bir şeyi yok etmemesidir.

+0

Bu özellikle, aşağıdaki cevaptaki bağlantıyla birleştirildiğinde ve bu bağlamda jquery'deki son birkaç satırı görerek anlamlıdır. – Elija

16

bunu mantıklı bilmeniz gereken birkaç şey vardır:

  1. Bu sadece bir adı yok demektir anonim bir fonksiyondur.
  2. İşlev, bildirildikten hemen sonra çağrılır. Fonksiyon tanımından hemen sonra 2. satırdaki açık parantezi görüyor musunuz? Bu, "bu işlevi çağır" anlamına gelir.
  3. Bu işleve yalnızca bir parametre iletildi. Bu parametre, bir tarayıcının içindeki global kapsamın adı olan "pencere" dir.
  4. Aslında olarak adlandırılan işlev, * 2 * parametrelerinin beklediğini, ancak biz bir ile çağırıyoruz. Javascript, işlevlerin gerçekte beklediğinden daha fazla veya daha az parametre içeren işlevleri çağırmanızı sağlar. Geçirilen parametreler listesine ulaşmanın yolları vardır.
  5. Yalnızca bir parametreyi geçirdiğimizden, ikinci parametre otomatik olarak "tanımsız" olarak ayarlanacaktır. "undefined", "undefined" anlamına gelen özel bir javascript değeridir.
  6. adında ikinci parametremizi "undefined" ismiyle aldık. Bu nedenle, yerel bir değişken oluşturduk (parametreler, yerel değişkenlere çok benzer), undefined adlı ve değeri undefined.
  7. Neden Dünyada bunu yaptık? Anonim işlevimiz içinde, "tanımsız" olarak adlandırılırsak, gerçekten "tanımsız" değerine sahip olmasını sağlamanın bir yoludur. Eğer bunu yapmasaydık ve kapsamımızın dışındaki bazı çılgın kodlar "tanımsız" olarak yeniden tanımlandı ("undefined = 42" gibi bir şey söyleyerek), o zaman tanımlanamadığımızı düşünerek kod yazabilirdik ama aslında 42'ye gönderme yapıyoruz. 1 parametresini geçip 2'yi bekliyor ve undefined ikincisini çağırıyor olan bu shenaniganslar bizi böyle saçmalıklardan koruyor.

Umarım bu açık, eğer olmasın, bana bildirin. Tüm bunları yukarıda belirtilen Paul Irish'ın videosundan öğrendim.

İlgili konular