Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die var-Anweisung deklariert funktions- oder global-gescoped Variablen und kann jede mit einem Wert initialisieren.
Der Name der zu deklarierenden Variablen. Jeder muss ein gültiger JavaScript-Bezeichner oder ein Destructuring-Bindungsmuster sein.
valueN OptionalDer anfängliche Wert der Variablen. Es kann jeder gültige Ausdruck sein. Der Standardwert ist undefined.
Der Scope einer mit var deklarierten Variablen ist eine der folgenden geschweifte-klammer-eingeschlossenen Syntaxstrukturen, die die var-Anweisung am nächsten umgibt:
Oder wenn keine der oben genannten zutrifft:
Wichtig ist, dass andere Blockkonstrukte, einschließlich Blockanweisungen, try...catch, switch, Header von einer der for-Anweisungen, keine Scopes für var erstellen, und Variablen, die mit var innerhalb eines solchen Blocks deklariert werden, außerhalb des Blocks weiterhin referenziert werden können.
In einem Skript wird eine mit var deklarierte Variable als nicht konfigurierbare Eigenschaft des globalen Objekts hinzugefügt. Das bedeutet, dass ihr Eigenschaftsbeschreiber nicht geändert werden kann und sie nicht mit delete gelöscht werden kann. JavaScript verfügt über automatische Speicherverwaltung, und es würde keinen Sinn machen, den delete-Operator auf eine globale Variable anwenden zu können.
In sowohl NodeJS CommonJS-Modulen als auch nativen ECMAScript-Modulen sind Top-Level-Variablendeklarationen auf das Modul beschränkt und werden nicht als Eigenschaften zum globalen Objekt hinzugefügt.
Die Liste, die dem Schlüsselwort var folgt, wird als Binding-Liste bezeichnet und durch Kommata getrennt, wobei die Kommata keine Komma-Operatoren und die =-Zeichen keine Zuweisungsoperatoren sind. Initialisierungen späterer Variablen können sich auf frühere Variablen in der Liste beziehen und den initialisierten Wert erhalten.
var-Deklarationen werden, wo auch immer sie in einem Skript vorkommen, verarbeitet, bevor irgendein Code innerhalb des Skripts ausgeführt wird. Die Deklaration einer Variablen an irgendeiner Stelle im Code entspricht ihrer Deklaration am Anfang. Dies bedeutet auch, dass eine Variable verwendet werden kann, bevor sie deklariert ist. Dieses Verhalten wird als _Hoisting_ bezeichnet, da es scheint, dass die Variablendeklaration an den Anfang der Funktion, des statischen Initialisierungsblocks oder des Skriptquellcodes, in dem sie auftritt, verschoben wird.
Hinweis: var-Deklarationen werden nur an den Anfang des aktuellen Skripts gehoben. Wenn Sie zwei <script>-Elemente innerhalb desselben HTML haben, kann das erste Skript nicht auf Variablen zugreifen, die vom zweiten deklariert wurden, bevor das zweite Skript verarbeitet und ausgeführt wurde.
Das wird implizit verstanden als:
Aus diesem Grund wird empfohlen, Variablen immer am Anfang ihres Scopes zu deklarieren (am Anfang des globalen Codes und am Anfang des Funktionscodes), um klarzustellen, welche Variablen zum aktuellen Funktions- oder globalen Scope gehören.
Nur die Deklaration einer Variablen wird gehoben, nicht die Initialisierung. Die Initialisierung erfolgt erst, wenn die Zuweisungsanweisung erreicht wird. Bis dahin bleibt die Variable undefined (aber deklariert):
Das wird implizit verstanden als:
Doppelte Variablendeklarationen mit var führen nicht zu einem Fehler, selbst im strikten Modus, und die Variable verliert ihren Wert nicht, es sei denn, die Deklaration hat einen Initialisierer.
var-Deklarationen können auch im selben Scope wie eine function-Deklaration stehen. In diesem Fall überschreibt der Initialisierer der var-Deklaration immer den Wert der Funktion, unabhängig von ihrer relativen Position. Dies liegt daran, dass Funktionsdeklarationen vor jedem Initialisierer gehoben werden, sodass der Initialisierer später kommt und den Wert überschreibt.
var-Deklarationen können nicht im selben Scope wie eine let, const, class oder import-Deklaration stehen.
Da var-Deklarationen nicht auf Blöcke beschränkt sind, gilt dies auch für den folgenden Fall:
Es gilt nicht für den folgenden Fall, bei dem let sich in einem Kind-Scope von var befindet, nicht im selben Scope:
Eine var-Deklaration innerhalb eines Funktionskörpers kann denselben Namen wie ein Parameter haben.
Eine var-Deklaration innerhalb eines catch-Blocks kann denselben Namen wie der im catch gebundene Bezeichner haben, aber nur, wenn der catch-Bezeichner ein einfacher Bezeichner ist, nicht ein Destructuring-Muster. Dies ist eine veraltete Syntax und sollte nicht darauf vertraut werden. In diesem Fall wird die Deklaration außerhalb des catch-Blocks gehoben, aber ein im catch-Block zugewiesener Wert ist außerhalb nicht sichtbar.
Dies entspricht:
Achten Sie auf die Reihenfolge:
Hier werden x und y deklariert, bevor irgendein Code ausgeführt wird, aber die Zuweisungen erfolgen später. Zu dem Zeitpunkt, an dem x = y ausgewertet wird, existiert y, sodass kein ReferenceError geworfen wird und sein Wert undefined ist. Also wird x der undefinierte Wert zugewiesen. Dann wird y der Wert "A" zugewiesen.
Seien Sie vorsichtig mit der Syntax var x = y = 1 — y wird tatsächlich nicht als Variable deklariert, sodass y = 1 eine nicht-qualifizierte Bezeichnerzuweisung ist, die im nicht-strikten Modus eine globale Variable erstellt.
Dasselbe Beispiel wie oben, aber im strikten Modus:
Variablen, die wie implizite Globals erscheinen, können Referenzen auf Variablen in einem äußeren Funktions-Scope sein:
Die linke Seite jedes = kann auch ein Bindungsmuster sein. Dies ermöglicht das Erstellen mehrerer Variablen auf einmal.
Weitere Informationen finden Sie unter Destructuring.
| ECMAScript® 2027 Language Specification # sec-variable-statement |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.