2013-07-25 10 views
7

W John Resig's slideshow o tym, jak budował jQuery 1.4, wspomniał o punkcie, w którym dodał zmienną undefined do zamknięcia jQuery, ponieważ "możemy ponownie użyć (zmienna)".Dlaczego ponownie użyć `niezdefiniowane`?

undefined nie jest zwykłą zmienną:

> var undefined = 4 
    undefined 
> undefined 
    undefined 

Dlatego wiemy, że nie jest niezdefiniowana zmienna. Dlaczego więc undefined będzie ponownie niezdefiniowane w źródle jQuery?

Slide 31

+13

W starych przeglądarek, można było na nowo zdefiniować globalne 'undefined'. Tak już nie jest. –

+1

@CrazyTrain To powinno być odpowiedzią. –

+0

@CrazyTrain ma rację, można zdefiniować niezdefiniowana wewnątrz zamknięcia: (function() { niezdefiniowany niezdefiniowany = 5; console.log (nieokreślony); })() – Brian

Odpowiedz

10

Ponieważ w niektórych silnikach JavaScript jest możliwe, aby ustawić undefined do wartości. Ma to na celu upewnienie się, że undefined jest naprawdę undefined.

+4

Sugeruję przeciwko ochronie tak. To po prostu głupie. Jeśli ludzie są na tyle głupi, aby przedefiniować "niezdefiniowane", zasługują na to, co się stanie. – Ven

+2

@ user1737909: Wystarczająco uczciwe, ale co jeśli był to złośliwy skrypt: O –

+1

@ user1737909 istnieją konteksty obejmujące skrypty z wielu źródeł (pomyśl o witrynie z czasopismami "z czasopismami"), więc warto chronić własne Kod z głupoty innych ludzi (lub złośliwości). – Pointy

5

Dodatkowo do odpowiedzi + Hazet Rocket, możesz zmniejszyć rozmiar pliku po kompresji, gdy twój kod często używa undefined. To dlatego, że lokalna zmienna undefined mogła sama nazwa zniekształcone przez sprężarkę, gdy globalny undefined nie może:

foo === undefined; 
//  ^----- don't touch this, put "undefined" in the compressed result 

(function (undefined) { 
    foo === undefined; 
})(); 
// may however be mangled to 
(function(u){foo===u})(); 
+1

lub użyj 'void 0': p. – Ven

+0

@ user1737909: 'void 0' nie może być zmniejszony z 6 znaków. 'undefined' można zredukować do 1. – josh3736

+0

Mówisz o kompresji lub minimalizacji gzip? – Ian

Powiązane problemy