Heim >php教程 >PHP开发 >Eine ausführliche Erklärung der ES6-Befehle let und const

Eine ausführliche Erklärung der ES6-Befehle let und const

高洛峰
高洛峰Original
2016-12-29 13:20:211278Durchsuche

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 machen
const 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn