Funktion VS-Blockumfang:
Der Hauptunterschied zwischen var
y let
ist, dass Variablen, die mit var
sind funktionsabhängig . Funktionen, die mit let
sind blockabhängig . Zum Beispiel:
function testVar () {
if(true) {
var foo = 'foo';
}
console.log(foo);
}
testVar();
// logs 'foo'
function testLet () {
if(true) {
let bar = 'bar';
}
console.log(bar);
}
testLet();
// reference error
// bar is scoped to the block of the if statement
Variablen mit var
:
Wenn die erste Funktion testVar
wird die Variable foo aufgerufen, die mit var
ist auch außerhalb des if
Erklärung. Diese Variable foo
zur Verfügung stehen würde überall im Rahmen der testVar
Funktion .
Variablen mit let
:
Wenn die zweite Funktion testLet
wird die Variable bar aufgerufen, die mit let
ist nur innerhalb des if
Erklärung. Da Variablen, die mit let
sind blockabhängig (wobei ein Block der Code zwischen geschweiften Klammern ist, z. B. if{}
, for{}
, function{}
).
let
Variablen werden nicht hochgezogen:
Ein weiterer Unterschied zwischen var
y let
sind Variablen mit deklariert mit let
Lassen Sie sich nicht hochziehen . Dieses Verhalten lässt sich am besten an einem Beispiel erläutern:
Variablen mit let
nicht hochgezogen werden:
console.log(letVar);
let letVar = 10;
// referenceError, the variable doesn't get hoisted
Variablen mit var
tun hochgezogen werden:
console.log(varVar);
var varVar = 10;
// logs undefined, the variable gets hoisted
Global let
sich nicht an den window
:
Eine Variable, die mit let
im globalen Bereich (d.h. Code, der sich nicht in einer Funktion befindet), wird nicht als Eigenschaft der globalen window
Objekt. Ein Beispiel (dieser Code hat einen globalen Geltungsbereich):
var bar = 5;
let foo = 10;
console.log(bar); // logs 5
console.log(foo); // logs 10
console.log(window.bar);
// logs 5, variable added to window object
console.log(window.foo);
// logs undefined, variable not added to window object
Wann sollte let
verwendet werden über var
?
Utilice let
über var
wann immer Sie können, weil es einfach spezifischer ist. Dadurch werden potenzielle Benennungskonflikte, die bei einer großen Anzahl von Variablen auftreten können, reduziert. var
kann verwendet werden, wenn Sie wollen, dass eine globale Variable explizit in der window
Objekt (überlegen Sie immer genau, ob dies wirklich notwendig ist).
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.