Die von LET und const deklarierten Variablen sind nur im Codeblock gültig.
{lass a = 10; var b = 1;} a // referenceError: a ist nicht definiert.b // 1Keine variable Werbung
Variablen müssen nach der Deklaration verwendet werden, andernfalls wird ein Fehler gemeldet.
var tmp = 123; if (true) {tmp = 'abc'; // ReferenzErrorlet TMP;}Wiederholte Aussagen sind nicht erlaubt
// Fehlerfunktion () {let a = 10; var a = 1;}Umfang auf Blockebene
Funktion f () {console.log ('Ich bin draußen!'); } (function () {if (false) {// Wiederholen Sie die Funktionsfunktion f () {console.log ('Ich bin in innen!');}} f ();} ()); // Ich bin drinnen! ES5 Funktion Promotion // Ich bin draußen! ES6 Block-Ebeneconst -Befehl
Deklarieren Sie eine schreibgeschützte Konstante. Einmal deklariert, kann der Wert der Konstante nicht geändert werden.
Sobald eine Variable deklariert ist, muss sie sofort initialisiert werden und kann nicht später zugewiesen werden.
Globale Variablen, die von LET -Befehl, const -Befehl und Klassenbefehl deklariert sind, gehören nicht zu den Eigenschaften des globalen Objekts.
var a = 1; // Wenn in der Repl -Umgebung des Knotens sie als global.a // oder eine allgemeine Methode verwendet werden kann, kann sie so geschrieben werden.
Als nächstes werde ich Ihnen den const -Befehl von ES6 separat vorstellen
JS, das sich schon immer auf ECMA konzentriert hat, hatte noch nie das Konzept der Konstanten, und ES6 hat diesen Fehler wieder wettgemacht.
const foo = 'foo'; foo = 'bar'; // typeerror: Zuordnung zur konstanten Variablen.
Das obige Beispiel deklariert eine Konstante des Basistyps. Wenn Sie versuchen, den Anfangswert zu ändern, wird ein Fehler gemeldet. Wenn es sich um einen Wert des Referenztyps handelt, gilt es auch, aber eines muss ein Beispiel geben: Geben Sie ein Beispiel:
const foo = []; foo = [1]; // Zuordnung zur konstanten Variablen.
Ein normaler Fehler, kein Problem, schauen Sie noch einmal:
const foo = [1,2,3]; foo [1] = 4; console.log (foo) // [1, 4, 3]
Warum gibt es keinen Fehler? Und kann es erfolgreich geändert werden? Der Unterschied zwischen diesen beiden Beispielen besteht darin, dass der erstere den entsprechenden Inhalt des Zeigers geändert hat (muss mit dem JS -Referenztyp vertraut sein) und der letztere hat den Zeig, aber der Inhalt des Zeigenobjekts hat sich geändert. Für Foo bin ich nur ein Zeiger, der dafür verantwortlich ist, auf das entsprechende Objekt zu zeigen. Was den Objektinhalt betrifft, interessiert mich mein Geschäft nicht, damit ich es ändern kann. Wenn ich nicht möchte, dass sich der Inhalt ändert, kann ich eine andere Methode anwenden.
const foo = Object.freeze ([1,2,3]); Foo [1] = 4; Konsole.log (foo) // [1, 2, 3]
Auf diese Weise müssen Sie sich keine Sorgen um geändert machen.