Читать книгу JavaScript für Ungeduldige - Cay Horstmann - Страница 60

2.2Semikolonergänzung

Оглавление

In JavaScript müssen bestimmte Anweisungen mit einem Semikolon abgeschlossen werden, vor allem Variablendeklarationen, Ausdrucksanweisungen und nichtlineare Steueranweisungen (break, continue, return und throw). Allerdings ergänzt JavaScript die erforderlichen Semikolons für Sie.

Die Grundregel dafür ist einfach: Bei der Verarbeitung einer Anweisung nimmt der Parser jedes Token darin auf, bis er auf ein Semikolon oder ein ungültiges Token stößt, also eines, das nicht als Teil der Anweisung gedeutet werden kann. Geht diesem ungültigen Token ein Zeilentrennzeichen voraus, handelt es sich also um eine schließende geschweifte Klammer oder um das Ende der Eingabe, dann fügt der Parser ein Semikolon hinzu.

Betrachten Sie dazu das folgende Beispiel:

let a = x

+ someComplicatedFunctionCall()

let b = y

Hinter der ersten Zeile wird kein Semikolon ergänzt, denn das Token + am Anfang der zweiten Zeile ist nicht ungültig.

Dagegen ist das Token let am Anfang der dritten Zeile ungültig, denn schließlich kann es kein Teil der ersten Variablendeklaration sein. Da dieses ungültige Token auf ein Zeilentrennzeichen folgt, wird ein Semikolon eingefügt:

let a = x

+ someComplicatedFunctionCall();

let b = y

Die Regel mit den ungültigen Token ist einfach und funktioniert in fast allen Fällen sehr gut. Allerdings versagt sie, wenn eine neue Anweisung mit einem Token beginnt, das auch Teil der vorhergehenden Anweisung sein könnte. Betrachten Sie dazu das folgende Beispiel:

let x = a

(console.log(6 * 7))

Hinter dem a wird kein Semikolon eingefügt, denn rein syntaktisch gesehen ist a(console.log(6 * 7) gültiges JavaScript. Dieser Code ruft eine Funktion namens a mit dem von console.log zurückgegebenen Wert auf. Das Token ( in der zweiten Zeile wird daher nicht als ungültig angesehen.

Dieses Beispiel ist natürlich ziemlich gewollt, denn die Klammern um console.log(6 * 7) sind nicht nötig. Ein anderes häufig angeführtes Beispiel sieht wie folgt aus:

let a = x

[1, 2, 3].forEach(console.log)

Da hinter x eine öffnende eckige Klammer stehen kann, wird auch hier kein Semikolon ergänzt. In dem unwahrscheinlichen Fall, dass Sie tatsächlich auf diese Weise ein Array-Literal in einer Schleife durchlaufen wollen, müssen Sie das Array in einer Variablen speichern:

let a = x

const numbers = [1, 2, 3]

numbers.forEach(console.log)


JavaScript für Ungeduldige

Подняться наверх