2013-06-11 20 views
20

Rozumiem, że dobrze jest używać składni średników po wszystkich instrukcjach w JavaScript, ale czy ktoś wie dlaczego instrukcje if/else nie wymagają ich po nawiasach klamrowych?Dlaczego średniki nie są używane po instrukcjach if/else?

+1

'while {} do' i 'for() {}' również mają tę właściwość. –

+0

Chodzi o gramatykę języka. Wiesz, co to jest, poszukaj "Oświadczenia" [tutaj] (http://www-archive.mozilla.org/js/language/grammar14.html). – acdcjunior

+0

[Kiedy należy używać średnika po nawiasach klamrowych?] (Http://stackoverflow.com/questions/2717949/when-should-i-use-a-semicolon-after-curly-braces) –

Odpowiedz

33
  • średnik jest używany do zakończenia jednej instrukcji
  • { i } rozpocząć i zamknąć grupę sprawozdania

Zasadniczo if-else muszą być przestrzegane przez każdą oświadczenia lub grupy oświadczeń.

if-else następuje stwierdzenie:

if (condition) statement; 
if (condition); // followed by a statement (an empty statement) 

if-else następnie grupy stwierdzeń:

if (condition) { 
    statement; 
    statement; 
} 

if (condition) { 
    // followed by a group of statements of zero length 
} 

if-else musi kończyć się ; jeśli to jest po jednej instrukcji. if-else nie kończy się na ;, po którym następuje grupa instrukcji, ponieważ ; służy do zakończenia pojedynczej instrukcji i nie jest używana do kończenia grupy instrukcji.

+0

elokwentnie umieścić. – Orangepill

+0

Nie zgadzam się z "nawet jeśli-else musi kończyć się;". Każde wyrażenie w javascript nie musi kończyć się; FYI. Nie ma ścisłej zasady jako takiej. – Vineeth

+0

Każda instrukcja, która nie jest zakończona kontekstualnie (tj. Przez nawiasy klamrowe) potrzebuje; – Orangepill

5

Ponieważ same nawiasy klamrowe są znakami kończącymi.

Są to znaki, które zawierają złożony blok instrukcji i są wewnętrznie zakończone. To jak wstawianie kropki na końcu zdania, to sygnalizuje parserowi, że myśl jest kompletna.

Podczas gdy jest całkowicie brzydki, ważne jest zawijanie każdej instrukcji w {} i pomijanie;

+0

Ale można pominąć; przez zawijanie w {} – Orangepill

+0

Zdecydowanie nie przekazuje js lint – FlavorScape

9

Prawdziwą odpowiedzią jest to, że wiele współczesnych języków skopiowało swoją składnię z C, która ma tę właściwość. JavaScript jest jednym z tych języków.

C pozwala bloki komunikat

{ ... } 

(które nie wymagają zakończenia średników) mają być stosowane tam, gdzie mogą być stosowane oświadczenia. Tak więc możesz używać bloków instrukcji jako klauzul tam i potem, bez średników.

Jeśli umieścisz instrukcję pojedyncza w klauzuli then- lub else, będziesz musiał zakończyć ją średnikiem. Znowu, tak jak w C, z dodatkowym skręceniem JavaScript; jest opcjonalny na końcu wiersza, jeśli wstawienie go nie spowodowałoby błędu składni.