2011-11-13 9 views
7

Chcę wiedzieć, czy to jest legalne?Czy w instrukcjach javascript obowiązują średniki?

function test() 
{ 
    alert ("hello") 
    $("#loading").show(); 
} 

może powinienem napisać to w zamian:

function test() 
{ 
    alert ("hello"); 
    $("#loading").show(); 
} 

Czy średniki opcjonalnie w JavaScript? Ponieważ widziałem to na forum:

Nie, średniki są zazwyczaj opcjonalne w JavaScript (google dla ASI/automatycznego wstawienia średnika). Używanie ich sprawia, że ​​kod wygląda dużo czystszy, a ASI to okropna, nie pasująca do mnie cecha (przynajmniej moim zdaniem).

+1

Patrz: http://stackoverflow.com/questions/7219541/what-is-the-difference-between-semicolons-in-javascript-and-in-python/7219549#7219549 i inne odpowiedzi do pytanie – NullUserException

+1

Twoje dwa stwierdzenia mają zarówno średniki, jak i różne. – Nightfirecat

+0

@Nightfirecat - Początkowo nie wyglądały tak, jak wygląda edycja NullUserException, w której wstawiono średnik. Edit: but then removed it again! –

Odpowiedz

12

Średniki nie zawsze są obowiązkowe, ale zawsze polecam ich używanie. Zobacz ECMAScript spec dla przepisów dotyczących automatycznego wstawiania średnik:

Pewne oświadczenia ECMAScript (pustym stwierdzeniem, zmienna oświadczenie, oświadczenie wyrażenie, do-while, instrukcja continue, break oświadczenie, return, i rzucać oświadczenie) musi być zakończone średnikami. Takie średniki mogą zawsze pojawiać się wyraźnie w tekście źródłowym . Dla wygody jednak takie średniki można w pewnych sytuacjach pominąć z tekstu źródłowego . Sytuacje te są następujące: opisano, mówiąc, że średniki są automatycznie wstawiane do strumienia kodu źródłowego w tych sytuacjach.

Aktualizacja (w celu dalszego wyjaśnienia)

Prawdopodobnie najbardziej powszechna sytuacja używane, aby pokazać, dlaczego automatycznego wstawiania średnik może być złe jest to, że poruszone przez @sissonb w innej odpowiedzi. Rozważmy następujący:

function something(a, b) { 
    return 
    a + b; 
} 

Co można oczekiwać jest dla nowej linii mają być ignorowane, a kod interpretowany jako:

function something(a, b) { 
    return a + b; 
} 

Niestety automatycznego wstawiania średnik wchodzi w grę, a Kod jest właściwie interpretować tak:

function something(a, b) { 
    return; 
    a + b; 
} 

i pusty return stwierdzenie oznacza, że ​​funkcja zwraca undefined. Więc zamiast ładnej sumy dwóch argumentów, otrzymujesz undefined i potencjalnie kończy się to bardzo nieporozumieniem co do tego, gdzie popełniłeś błąd! Właśnie dlatego całkowicie zgadzam się z tym stwierdzeniem w twoim pytaniu, że automatyczne wstawienie średnika jest okropnym błędem.

+0

Jednym rozsądnym wyjątkiem byłoby jedno-liniowe wywołanie zwrotne: 'ar.sort (funkcja (a, b) {return f (a) - f (b)})' –

0

średników nie są obowiązkowe. Są one automatycznie dodawane na końcu wiersza, jeśli go brakuje, co powoduje, że ten kod zwraca niezdefiniowany kod.

return 
{ 
    text:"hello" 
} 
+1

faktycznie zwraca 'undefined', co nie jest dokładnie tym samym, co' null' – NullUserException

+0

@NullUserException ఠ_ఠ Zaktualizowano moją odpowiedź. Dzięki – sissonb

Powiązane problemy