Anweisungen und Deklarationen
JavaScript-Code besteht aus Anweisungen und Deklarationen, die Ausdrücke enthalten können. Diese Referenz gruppiert die Konstrukte, die zur Steuerung der Ausführung und zum Deklarieren von Bindungen verwendet werden. Eine Anweisung kann sich über mehrere Zeilen erstrecken, und eine Zeile kann mehrere Anweisungen enthalten.
Anweisungen und Deklarationen nach Kategorie
Eine alphabetische Auflistung finden Sie in der Seitenleiste links.
Kontrollfluss
return-
Gibt den Wert an, der von einer Funktion zurückgegeben werden soll.
break-
Beendet die aktuelle Schleife,
switch- oder Label-Anweisung und übergibt die Programmkontrolle an die Anweisung, die auf die beendete Anweisung folgt. continue-
Beendet die Ausführung der Anweisungen in der aktuellen Iteration der aktuellen oder beschrifteten Schleife und setzt die Ausführung der Schleife mit der nächsten Iteration fort.
throw-
Löst eine benutzerdefinierte Ausnahme aus.
if...else-
Führt eine Anweisung aus, wenn eine angegebene Bedingung wahr ist. Wenn die Bedingung falsch ist, kann eine andere Anweisung ausgeführt werden.
switch-
Wertet einen Ausdruck aus, gleicht den Wert des Ausdrucks mit einer
case-Klausel ab und führt Anweisungen aus, die diesem Fall zugeordnet sind. try...catch-
Markiert einen Block von Anweisungen, der versucht werden soll, und gibt eine Reaktion an, falls eine Ausnahme ausgelöst wird.
Variablen deklarieren
var-
Deklariert eine Variable und initialisiert sie optional mit einem Wert.
let-
Deklariert eine blockbereichsgebundene Variable und initialisiert sie optional mit einem Wert.
const-
Deklariert eine blockbereichsgebundene Variable, die nicht erneut zugewiesen werden kann und bei der Deklaration initialisiert werden muss.
using-
Deklariert eine Variable wie
const, die synchron freigegeben wird. await using-
Deklariert eine Variable wie
const, die asynchron freigegeben wird.
Funktionen und Klassen
function-
Deklariert eine Funktion mit den angegebenen Parametern.
function*-
Generatorfunktionen erleichtern das Schreiben von Iteratoren.
async function-
Deklariert eine asynchrone Funktion mit den angegebenen Parametern.
async function*-
Asynchrone Generatorfunktionen erleichtern das Schreiben von asynchronen Iteratoren.
class-
Deklariert eine Klasse.
Iterationen
do...while-
Erstellt eine Schleife, die eine angegebene Anweisung ausführt, bis die Testbedingung zu
falseausgewertet wird. Die Bedingung wird nach der Ausführung der Anweisung ausgewertet, wodurch die angegebene Anweisung mindestens einmal ausgeführt wird. for-
Erstellt eine Schleife, die aus drei optionalen Ausdrücken besteht, die in Klammern eingeschlossen und durch Semikolons getrennt sind, gefolgt von einer Anweisung, die in der Schleife ausgeführt wird.
for...in-
Iteriert in beliebiger Reihenfolge über die aufzählbaren Eigenschaften eines Objekts. Für jede unterschiedliche Eigenschaft können Anweisungen ausgeführt werden.
for...of-
Iteriert über iterierbare Objekte (einschließlich Arrays, array-ähnlicher Objekte, Iteratoren und Generatoren), wobei ein benutzerdefinierter Iterations-Hook mit Anweisungen aufgerufen wird, die für den Wert jeder unterschiedlichen Eigenschaft ausgeführt werden.
for await...of-
Iteriert über asynchron iterierbare Objekte, array-ähnliche Objekte, Iteratoren und Generatoren), wobei ein benutzerdefinierter Iterations-Hook mit Anweisungen aufgerufen wird, die für den Wert jeder unterschiedlichen Eigenschaft ausgeführt werden.
while-
Erstellt eine Schleife, die eine angegebene Anweisung ausführt, solange die Testbedingung zu
trueausgewertet wird. Die Bedingung wird vor der Ausführung der Anweisung ausgewertet.
Sonstiges
- Leer
-
Eine leere Anweisung wird verwendet, um keine Anweisung bereitzustellen, obwohl die JavaScript-Syntax eine erwarten würde.
- Block
-
Eine Blockanweisung wird verwendet, um null oder mehr Anweisungen zu gruppieren. Der Block wird durch ein Paar geschweifter Klammern begrenzt.
- Ausdrucksanweisung
-
Eine Ausdrucksanweisung wertet einen Ausdruck aus und verwirft dessen Ergebnis. Sie ermöglicht dem Ausdruck, Nebeneffekte auszuführen, beispielsweise eine Funktion auszuführen oder eine Variable zu aktualisieren.
debugger-
Ruft jede verfügbare Debugging-Funktionalität auf. Wenn keine Debugging-Funktionalität verfügbar ist, hat diese Anweisung keine Wirkung.
export-
Wird verwendet, um Funktionen zu exportieren und sie für Imports in externen Modulen und anderen Skripten verfügbar zu machen.
import-
Wird verwendet, um Funktionen zu importieren, die aus einem externen Modul oder einem anderen Skript exportiert wurden.
import defer-
Lädt ein Modul als Namespace und verschiebt die synchrone Auswertung, bis auf die Eigenschaften des zurückgegebenen Namespace zugegriffen wird.
import source-
Führt zu einem Objekt, das den kompilierten Quellcode des Moduls darstellt, ohne dessen Abhängigkeiten zu laden, es zu verknüpfen oder auszuwerten.
- Label
-
Versieht eine Anweisung mit einem Bezeichner, auf den Sie mit einer
break- odercontinue-Anweisung verweisen können. with-
Erweitert die Scope-Kette für eine Anweisung.
Was sind Anweisungen, Deklarationen und Ausdrücke?
Alle JavaScript-Programme bestehen aus einer Sequenz von Konstrukten der obersten Ebene, die eine der oben aufgeführten Syntaxen verwenden. Diese werden als Anweisungen und Deklarationen bezeichnet. In der MDN-Dokumentation bezeichnen wir beide umgangssprachlich oft als Anweisungen, technisch gesehen sind sie jedoch zwei getrennte Mengen von Grammatiken.
Folgende sind Deklarationen:
letconstusingawait usingfunctionfunction*async functionasync function*classexport(Hinweis: Es kann nur auf der obersten Ebene eines Moduls erscheinen.)import(Hinweis: Es kann nur auf der obersten Ebene eines Moduls erscheinen.)
Alles andere in der obigen Liste ist eine Anweisung.
Die Begriffe „Anweisung“ und „Deklaration“ haben in der formalen Syntax von JavaScript eine präzise Bedeutung, die sich darauf auswirkt, wo sie im Code platziert werden dürfen. Beispielsweise akzeptiert der Rumpf in den meisten Kontrollflussstrukturen nur Anweisungen — wie die beiden Zweige eines if...else:
if (condition)
statement1;
else
statement2;
Wenn Sie statt einer Anweisung eine Deklaration verwenden, wäre dies ein SyntaxError. Beispielsweise ist eine let-Deklaration keine Anweisung, sodass Sie sie nicht in ihrer bloßen Form als Rumpf einer if-Anweisung verwenden können.
if (condition)
let i = 0; // SyntaxError: Lexical declaration cannot appear in a single-statement context
Andererseits ist var eine Anweisung, sodass Sie es allein als if-Rumpf verwenden können.
if (condition)
var i = 0;
Sie können Deklarationen als „Bindung von Bezeichnern an Werte“ und Anweisungen als „Ausführen von Aktionen“ betrachten. Die Tatsache, dass var eine Anweisung und keine Deklaration ist, ist ein Sonderfall, da es nicht den normalen Regeln des lexikalischen Scope folgt und Nebeneffekte erzeugen kann — in Form der Erstellung globaler Variablen, der Veränderung bestehender durch var definierter Variablen und der Definition von Variablen, die außerhalb ihres Blocks sichtbar sind (da durch var definierte Variablen nicht blockbereichsgebunden sind).
Als weiteres Beispiel können Labels nur an Anweisungen angehängt werden.
label: const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
Hinweis: Es gibt eine Legacy-Grammatik, die Funktionsdeklarationen mit Labels erlaubt, sie ist jedoch nur zur Kompatibilität mit der Realität des Webs standardisiert.
Um dies zu umgehen, können Sie die Deklaration in geschweifte Klammern einschließen — dadurch wird sie Teil einer Blockanweisung.
label: {
const a = 1;
}
if (condition) {
let i = 0;
}
In JavaScript erzeugen Anweisungen und Deklarationen Werte, aber diese Werte sind fast nie beobachtbar (außer bei eval()). Ihr Zweck besteht darin, die umgebende Umgebung zu manipulieren und Nebeneffekte zu erzeugen — Variablenbindungen zu erstellen, Dinge auszugeben, Variablenwerte zu ändern usw. Die Werte, die sie verwenden, stammen aus der Auswertung von Ausdrücken.
Ausdrücke sind keine Konstrukte der obersten Ebene; sie können nur in bestimmten Positionen innerhalb von Anweisungen und Deklarationen verwendet werden, etwa if (expression), const x = expression usw. Die Syntax der Ausdrucksanweisung ermöglicht es, die meisten Ausdrücke als Anweisungen zu verwenden, aber dabei handelt es sich lediglich um eine Anweisung mit einem einzigen Ausdrucks-Slot.
Sie können die JavaScript-Syntaxstrukturen nur mit Anweisungen, Deklarationen und Ausdrücken abbilden:
- Anweisungen können Anweisungen, Deklarationen und Ausdrücke enthalten (wie
if (expression) statementund Blockanweisungen{ statement; declaration }). - Deklarationen können Anweisungen, Deklarationen und Ausdrücke enthalten (wie
function x() { statement; declaration }undconst x = expression). - Ausdrücke können Anweisungen, Deklarationen und Ausdrücke enthalten (wie
() => { statement; declaration }undconsole.log(expression)).
In der Referenzdokumentation zu jedem Syntaxbestandteil beschreiben wir alle seine „Slots“ und geben an, ob jeder Slot eine Anweisung, Deklaration oder ein Ausdruck ist.
Operatoren sind ein weiteres wichtiges Konzept in der JavaScript-Grammatik, aber sie funktionieren nicht wie Bausteine. Weitere Informationen finden Sie unter Was sind Operatoren?.