Im Gegensatz zu Programmiersprachen wie C und Java sind Variablen in JavaScript untypisiert und alle Variablendefinitionen verwenden das Schlüsselwort var:
Wenn einer Variablen nach ihrer Definition kein Wert zugewiesen wird, ist der Wert der Variablen undefiniert. Beispielsweise sind die Werte der drei Variablen a, m und n im obigen Code alle undefiniert.
Da Variablen in JS typlos sind, ist es durchaus möglich, derselben Variablen verschiedene Arten von Werten zuzuweisen, wie zum Beispiel:
Zusätzlich zu verschiedenen Arten von Zuweisungen an dieselbe Variable kann JavaScript Variablen auch wiederholt definieren. Wenn Sie dies tun, entspricht die Variablendefinitionsanweisung nach dem ersten Mal der Zuweisungsanweisung:
Im strikten Modus des ECMAScript-Standards müssen alle Variablendefinitionen das Schlüsselwort var verwenden. Wenn der strikte Modus nicht verwendet wird und ein JS-Programm einer undefinierten Variablen einen Wert zuweist, erstellt das Programm eine Eigenschaft mit demselben Namen wie die Variable im globalen JS-Objekt, d. h. es wird eine neue globale Variable erstellt. Dieser Ansatz wird viele Probleme verursachen (z. B. globale Variablenverschmutzung zwischen mehreren JS-Programmen usw.) und große Probleme bei der späteren Wartung mit sich bringen. Daher sollte dieser Ansatz im eigentlichen Entwicklungsprozess so weit wie möglich vermieden werden.
Speicherung von Variablen
Wenn die definierte Variable eine globale Variable ist und das Schlüsselwort var im Variablendefinitionsprozess nicht verwendet wird, existiert die Variable als Attribut des globalen Objekts, das durch Zugriff auf das entsprechende Attribut dieses (globalen) erhalten werden kann Objekt) oder Es kann mit dem Schlüsselwort delete aus dem globalen Objekt gelöscht werden:
f; löschen
löschen g;
console.log(this.f);//undefiniert
console.log(this.g);//undefiniert
Für jeden Funktionsaufruf in JavaScript erstellt JavaScript ein lokales Objekt, um die in der Funktion definierten lokalen Variablen zu speichern. Wenn innerhalb der Funktion eine verschachtelte Funktion definiert ist, erstellt JavaScript ein lokales Objekt, nachdem die Funktion definiert wurde lokales Objekt innerhalb des lokalen Objekts. Für eine Funktion gibt es so viele Ebenen verschachtelter lokaler Objekte wie Ebenen verschachtelter Funktionsdefinitionen darin. Dieses lokale Objekt wird als „Funktionsaufrufobjekt“ bezeichnet („Aufrufobjekt“ in ECMAScript 3, umbenannt in „deklarativer Umgebungsdatensatz“ in ECMAScript 5, aber ich persönlich denke, dass der Name in ECMAScript 3 einfacher zu verstehen ist).
Im Gegensatz zum globalen Objekt this bietet JavaScript keine Möglichkeit, auf diese lokalen Objekte (Funktionsaufrufobjekte) zuzugreifen. Daher können Entwickler diese lokalen Objekte nicht bearbeiten. Das Verständnis dieser Funktionsaufrufobjekte wird jedoch für das Verständnis einiger Konzepte in JavaScript, wie z. B. des Variablenbereichs und der Abschlüsse, von großem Nutzen sein.