Der Hauptunterschied ist die Umfang Unterschied, während lassen Sie kann nur innerhalb der Umfang es wird deklariert, wie in der for-Schleife, var kann zum Beispiel außerhalb der Schleife aufgerufen werden. Aus der Dokumentation in MDN (Beispiele auch von MDN):
lassen Sie ermöglicht es Ihnen, Variablen zu deklarieren, die auf den Block, die Anweisung oder den Ausdruck beschränkt sind, in dem sie verwendet werden. Dies ist anders als die var Schlüsselwort, das eine Variable global oder lokal für eine gesamte Funktion unabhängig vom Blockbereich definiert.
Variablen, die von lassen Sie haben als Geltungsbereich den Block, in dem sie definiert sind, sowie alle darin enthaltenen Unterblöcke. Auf diese Weise, lassen Sie funktioniert sehr ähnlich wie var . Der Hauptunterschied besteht darin, dass der Anwendungsbereich einer var Variable ist die gesamte umschließende Funktion:
function varTest() {
var x = 1;
if (true) {
var x = 2; // same variable!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}`
Auf der obersten Ebene der Programme und Funktionen, lassen Sie im Gegensatz zu var wird keine Eigenschaft auf dem globalen Objekt erstellt. Zum Beispiel:
var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined
Wenn let innerhalb eines Blocks verwendet wird, beschränkt sich der Geltungsbereich der Variablen auf diesen Block. Beachten Sie den Unterschied zwischen var deren Geltungsbereich innerhalb der Funktion liegt, in der sie deklariert wird.
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // the scope is global
let b = 22; // the scope is inside the if-block
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
Vergessen Sie auch nicht, dass es sich um eine ECMA6-Funktion handelt, die noch nicht vollständig unterstützt wird. Daher ist es besser, sie mit Babel usw. in ECMA5 zu übertragen. babel website
133 Stimmen
ECMAScript ist der Standard und
let
ist enthalten in der Entwurf der 6. Auflage und wird höchstwahrscheinlich in der endgültigen Spezifikation enthalten sein.12 Stimmen
Véase kangax.github.io/es5-compat-table/es6 für eine aktuelle Unterstützungsmatrix der ES6-Funktionen (einschließlich let). Zum Zeitpunkt der Erstellung dieses Artikels unterstützen Firefox, Chrome und IE11 diese Funktion (obwohl ich glaube, dass die Implementierung von FF nicht ganz Standard ist).
37 Stimmen
Die längste Zeit wusste ich nicht, dass Variablen in einer for-Schleife auf die Funktion, in die sie eingeschlossen war, skaliert wurden. Ich erinnere mich, dass ich dies zum ersten Mal herausfand und dachte, es sei sehr dumm. Jetzt weiß ich allerdings, wie die beiden aus unterschiedlichen Gründen verwendet werden können und dass man in manchen Fällen eine Variable in einer for-Schleife verwenden möchte, ohne dass sie auf den Block skaliert ist.
1 Stimmen
In dem Maße, wie sich die Unterstützung von ES6-Funktionen verbessert, verlagert sich der Schwerpunkt der Frage nach der Akzeptanz von ES6 von der Unterstützung von Funktionen auf Leistungsunterschiede. Als solches, Hier ist eine Website, die ich gefunden Benchmarking Leistungsunterschiede zwischen ES6 und ES5 . Beachten Sie, dass sich dies im Laufe der Zeit wahrscheinlich ändern wird, da die Engines für ES6-Code optimiert werden.