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 initialisiert optional jede mit einem Wert.
Der Name der zu deklarierenden Variablen. Jeder muss ein legaler JavaScript-Bezeichner oder ein Destructuring-Bindungsmuster sein.
valueN OptionalInitialwert der Variablen. Es kann jeder legale Ausdruck sein. Der Standardwert ist undefined.
Der Geltungsbereich einer mit var deklarierten Variablen ist eine der folgenden geschweiften Klammer-Synaxen, die die var-Anweisung am engsten einschließt:
Oder, wenn keine der obigen zutrifft:
Wichtig ist, dass andere Blockkonstrukte, einschließlich Blockanweisungen, try...catch, switch, Header von einer der for-Anweisungen keine Geltungsbereiche für var erstellen, und Variablen, die mit var innerhalb eines solchen Blocks deklariert werden, können weiterhin außerhalb des Blocks referenziert werden.
In einem Skript wird eine mit var deklarierte Variable als nicht konfigurierbares Property des globalen Objekts hinzugefügt. Das bedeutet, dass ihr Property-Deskriptor nicht geändert und nicht mit delete gelöscht werden kann. JavaScript hat eine automatische Speicherverwaltung, und es würde keinen Sinn ergeben, den delete-Operator auf eine globale Variable anzuwenden.
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 auf das var-Schlüsselwort folgt, wird als Bindungsliste bezeichnet und durch Kommas getrennt, wobei die Kommas 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 deren initialisierten Wert erhalten.
var-Deklarationen, wo immer sie in einem Skript vorkommen, werden verarbeitet, bevor jeglicher Code im Skript ausgeführt wird. Eine Variable an beliebiger Stelle im Code zu deklarieren, ist gleichbedeutend damit, sie oben zu deklarieren. Das bedeutet auch, dass eine Variable scheinbar vor ihrer Deklaration verwendet werden kann. Dieses Verhalten wird _Hoisting_ genannt, da es scheint, als ob die Variablendeklaration an die Spitze der Funktion, des statistischen Initialisierungsblocks oder des Skript-Quellcodes verschoben wird, in dem sie vorkommt.
Hinweis: var-Deklarationen werden nur an die Spitze des aktuellen Skripts gehoben. Wenn Sie zwei <script>-Elemente innerhalb eines HTML-Dokuments haben, kann das erste Skript nicht auf Variablen zugreifen, die vom zweiten deklariert wurden, bevor das zweite Skript verarbeitet und ausgeführt wurde.
Dies wird implizit wie folgt verstanden:
Aus diesem Grund wird empfohlen, Variablen immer am Anfang ihres Geltungsbereichs zu deklarieren (am Anfang des globalen Codes und am Anfang des Funktionscodes), damit klar ist, welche Variablen zum aktuellen Funktionsbereich gehören.
Nur die Deklaration einer Variablen wird gehoben, nicht ihre Initialisierung. Die Initialisierung erfolgt erst, wenn die Zuweisung ausgeführt wird. Bis dahin bleibt die Variable undefined (aber deklariert):
Dies wird implizit wie folgt verstanden:
Doppelte Variablendeklarationen mit var lösen keinen Fehler aus, selbst im strengen Modus, und die Variable verliert ihren Wert nicht, es sei denn, die Deklaration hat einen Initialisierer.
var-Deklarationen können sich auch im gleichen Geltungsbereich wie eine function-Deklaration befinden. In diesem Fall überschreibt der Initialisierer der var-Deklaration immer den Funktionswert, unabhängig von ihrer relativen Position. Das liegt daran, dass Funktionsdeklarationen vor jedem Initialisierer gehoben werden, sodass der Initialisierer später kommt und den Wert überschreibt.
var-Deklarationen können sich nicht im gleichen Geltungsbereich wie eine let, const, class oder import-Deklaration befinden.
Da var-Deklarationen nicht an Blöcke gebunden sind, gilt dies auch für folgenden Fall:
Es gilt nicht für den folgenden Fall, bei dem let in einem untergeordneten Bereich von var ist, nicht im gleichen Bereich:
Eine var-Deklaration im Funktionskörper kann denselben Namen wie ein Parameter haben.
Eine var-Deklaration innerhalb eines catch-Blocks kann denselben Namen wie der im catch-Block gebundene Bezeichner haben, aber nur, wenn die catch-Bindung ein einfacher Bezeichner und kein Destructuring-Muster ist. 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 Code ausgeführt wird, aber die Zuweisungen erfolgen später. Zu dem Zeitpunkt, an dem x = y ausgewertet wird, existiert y also wird kein ReferenceError ausgelöst und sein Wert ist undefined. Daher wird x der undefined-Wert zugewiesen. Dann erhält y den Wert "A".
Seien Sie vorsichtig mit der var x = y = 1-Syntax — y wird nicht tatsächlich als Variable deklariert, daher ist y = 1 eine nicht qualifizierte Identifier-Zuweisung, die eine globale Variable im nicht-strengen Modus erstellt.
Dasselbe Beispiel wie oben, aber im strengen Modus:
Variablen, die scheinbar implizite Globale sind, können Referenzen auf Variablen in einem äußeren Funktionsbereich sein:
Die linke Seite jedes = kann auch ein Bindungsmuster sein. Dies ermöglicht die Erstellung mehrerer Variablen auf einmal.
Für weitere Informationen siehe Destructuring.
| ECMAScript® 2027 Language Specification # sec-variable-statement |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.