Tu nie chodzi o białą przestrzeń, chodzi o automatyczne wstawianie średnika przez JavaScript.
specyfikacji ECMAScript mówi
Pewne ECMAScript oświadczenia (pusty oświadczenie, zmienna oświadczeniu rachunku wypowiedzi, do-while oświadczeniu kontynuować oświadczenie, break oświadczenie, instrukcja return i rzucać oświadczenie) musi zakończone średnikami . Takie średniki mogą zawsze pojawiać się jawnie w tekście źródłowym. Dla wygody jednak takie średniki można w pewnych sytuacjach pominąć w źródłowym tekście . Te sytuacje są opisane przez , mówiąc, że średniki są automatycznie wstawiane do źródła kodu źródłowego kodu w tych sytuacjach.
Oznacza to, że Twój kod
var FOO = (function($)
{
return
{
init: function()
{
}
}
})(jQuery);
pobiera tłumaczone jako
var FOO = (function($)
{
return; // <- JavaScript will insert a semicolon here.
{
init: function()
{
}
}
})(jQuery);
So FOO będzie niezdefiniowana po funkcja jest wykonywana.
Dla twojego innego kodu,
JS nie wstawi żadnego średnika i będzie działało poprawnie
JS wstawi średnik po twoim dosłownym obiekcie i powinien działać poprawnie. [EDYCJA: Korekta jak wskazano przez kagnax]
Oznacza to, że zawsze powinieneś wypowiedzieć swoje instrukcje średnikiem. Pozwolenie wstawieniu średnika silnika JS może wprowadzać bardzo subtelne błędy, które wymagałyby wielu godzin debugowania. Możesz użyć narzędzia takiego jak JSLint, które będzie ostrzegać o brakujących średnikach.
możliwy duplikat [Jakie są zasady automatycznego wstawiania średników w języku JavaScript (ASI)?) (Http://stackoverflow.com/q/2846283/1048572) – Bergi
@Bergi technicznie to pytanie byłoby duplikatem tego, odkąd przyszedł pierwszy;) Ale nacisk i "przeszukiwalność" są różne (np. nie chcę tego pytania skasowane) – drzaus
@drzaus: Powielone zamknięcia nie muszą ściśle przestrzegać zlecenia czasowego - mamy wiele pytań kanonicznych, które były zapytałem później, ale mam odpowiedzi o wyższej jakości :-) Zauważ, że chciałem tylko powiązać ten powiązany, bardzo trafny post (nie jest to dokładny dupek), nie zamknąłem tego pytania (nie głosowałem). Również zamknięte pytania nie są usuwane. – Bergi