Robi się to, aby upewnić się, że undefined zawsze jest undefined
. W starszych wersjach specyfikacji ECMAScript (przed ECMAScript 5) niezdefiniowane nie było słowem zastrzeżonym, lecz zwykłą zmienną. W starszych przeglądarek będzie to mieć na przykład:
undefined = 2; // Assign a different value to undefined
// Now this statement would be true
if (undefined == 2)
Tak, aby upewnić się, że niezdefiniowane w rzeczywistości jest niezdefiniowane, nawet jeśli jakiś inny „zło” scenariusz byłby przeniesiony niezdefiniowane z inną wartością, należy utworzyć parametr, który call undefined, a następnie, gdy wywołujesz funkcję, upewnij się, że nie przekazujesz wartości do tego parametru - możesz więc być pewnym, że zmienna undefined będzie zawsze niezdefiniowana w twojej funkcji.
Tak więc w przypadku jQuery:
(function($, undefined) { ... })(jQuery);
przechodzą one w jQuery i przypisać ją do zmiennej $ dla wygody, ale potem nie przechodzą drugą wartość parametru nieokreślonego, co nieokreślone woli być niezdefiniowanym.
Nowoczesne przeglądarki
W nowoczesnych przeglądarek undefined
jest non-konfigurowalny, bez zapisu nieruchomość za tym ECMAScript 5 specification.
Powodem, dla którego jQuery używa tej metody zamiast 'typeof' jest to, że kompresuje ona znacznie lepiej w miniurze Javascript. – interjay
To prawda, jednak najbezpieczniejsza jest metoda typeof. Możesz także użyć nieokreślonej natury falsji, która byłaby najkrótszym sprawdzianem dla 'niezdefiniowanej ', ale jest zacieniona przez istnienie innych wartości fałszerstw. – Christoph