Mit let und const deklarierte Variablen sind nur innerhalb des Codeblocks gültig
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
Es gibt keine Variablenförderung
Die Variable muss nach der Deklaration in Gebrauch sein, sonst wird ein Fehler gemeldet
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
Wiederholte Deklarationen sind nicht zulässig
// 报错 function () { let a = 10; var a = 1; }
Bereich auf Blockebene
function f() { console.log('I am outside!'); } (function () { if(false) { // 重复声明一次函数f function f() { console.log('I am inside!'); } } f(); }()); //I am inside! ES5 函数提升 //I am outside! ES6 块级作用域
const-Befehl
deklariert eine schreibgeschützte Konstante. Nach der Deklaration kann der Wert der Konstante nicht geändert werden
Sobald eine Variable deklariert ist, muss sie sofort initialisiert werden und kann nicht für eine spätere Zuweisung zurückgelassen werden
Globale Variablen deklariert Durch den let-Befehl, den const-Befehl und den class-Befehl gehören sie nicht zu den globalen Objektattributen
var a = 1; // 如果在Node的REPL环境,可以写成global.a // 或者采用通用方法,写成this.a window.a // 1 let b = 1; window.b // undefined
Lassen Sie mich Ihnen den const-Befehl von ES6 vorstellen separat
Es gab immer keine Konstante in js mit Ecma als Kernkonzept, es6 gleicht diesen Fehler aus
const foo='foo'; foo='bar';//TypeError: Assignment to constant variable.
Das obige Beispiel deklariert eine Konstante eines Basistyps. Wenn es sich um einen Referenztypwert handelt, wird ein Fehler gemeldet. Es gibt jedoch Folgendes zu beachten:
const foo=[]; foo=[1];//Assignment to constant variable.
const foo=[1,2,3]; foo[1]=4; console.log(foo)//[1, 4, 3]
Warum wird hier kein Fehler gemeldet? Und kann die Änderung erfolgreich sein? Der Unterschied zwischen diesen beiden Beispielen besteht darin, dass ersteres den Zeiger geändert hat (Sie müssen mit den Referenztypen von js vertraut sein) und sich der entsprechende Inhalt geändert hat, während letzteres nicht auf dasselbe zeigt, sondern sich der Inhalt des Objekts geändert hat. Für foo, ich nur Ein Zeiger ist dafür verantwortlich, auf das entsprechende Objekt zu verweisen. Der Inhalt des Objekts spielt für mich keine Rolle. Wenn Sie also nicht möchten, dass sich der Inhalt ändert kann eine andere Methode verwenden;
Auf diese Weise müssen Sie sich keine Gedanken über Änderungen machenconst foo=Object.freeze([1,2,3]); foo[1]=4; console.log(foo)//[1, 2, 3]
Für weitere Einzelheiten Artikel zu let- und const-Befehlen in ES6 finden Sie auf der chinesischen PHP-Website!