JQuery kaynağındaki neden bu iki parametre neden?

JQuery kaynağı şu şekilde kapatılmıştır:

(function(window, undefined) {
   //awesome jQuery library code in here
})(window);

Neden bu parametrelerden birine ihtiyaç duyulduğunu anlamıyorum.

window global bir değişken olduğundan, neden iletilmesi gerekiyor? Küresel bir parametreden geçirmenin ve aynı isimdeki kapağın içine girmenin amacı nedir?

undefined parametresi nedir? Neden herhangi bir değer geçmedi?

6
Bu kapsamda yerel olarak kullanılabilecek bir pencere, daha hızlı erişilmesini sağlıyor, bence.
katma yazar Ibu, kaynak

1 cevap

Bunun çoktan cevaplandığına eminim, ama:

  • penceresinden a) kod sıkıştırmasının isminin kesilmesine izin verir (yani anonim işlev içinde tek harfli bir değişken adıyla değiştirilir) ve b) değişkenin değişkenlere başvurmasını sağlar. jQuery yüklendikten sonra global kapsamdaki herkes window yeniden tanımlanırsa, kütüphane tanımlandığında pencere nesnesi tanımlanır.

  • undefined dahil olmak üzere undefined argümanı (ancak bir değerden geçmemekle birlikte), undefined için aynı şeyi yapar, değişken mashing'e izin verir ve undefined değişkeni yeniden tanımlandı (yup, Javascript buna izin veriyor).

Her iki durumda da bu durumun değişkenlere yapılan referansları hızlandırması gerektiğine inanıyorum, çünkü hem global değişkenleri hem fonksiyon kapsamı içinde hem de global kapsamda aramadan önce araştıracak olan arama fonksiyonunda bulabilirsiniz. Ama dürüstçe, buradaki performans farkının önemli olduğunu hayal edemiyorum - en büyük sorunun, küçültüldüğünde daha küçük kodlar üreten değişken isim mashing olduğunu düşünüyorum.

11
katma
Eğer global kapsamda pencere yeniden tanımlanmışsa, bunu ilettiğinizde yine de yinelenmez mi?
katma yazar Peter Olson, kaynak
tamamen mantıklı, +1
katma yazar Ibu, kaynak
@PeterOlson sanırım o zaman "munge kod sıkıştırma" neden olur
katma yazar Ibu, kaynak
@PeterOlson - daha sonra yeniden tanımlanmış değilse - jQuery kitaplığı yüklendiğinde window başvurusu giderilir, böylece sonraki window shenanigans'ın herhangi bir etkisi olmaz. Sanırım kütüphane yüklenmeden önce pencereyi yeniden tanımlarsanız, bu kırılacak, ama sonra ne aldığınızı hak ediyorsunuz :).
katma yazar nrabinowitz, kaynak
Bunu düşünmeye gelince, undefined değişkeni de yeniden tanımlanabilir, böylece bu da buna karşı korur. Cevabı güncellendi.
katma yazar nrabinowitz, kaynak