Bei Verwendung let
El let
Schlüsselwort fügt die Variablendeklaration in den Geltungsbereich eines beliebigen Blocks (in der Regel ein { .. }
Paar), in dem es enthalten ist. Mit anderen Worten, let
übernimmt implizit den Geltungsbereich eines jeden Blocks für seine Variablendeklaration.
let
Variablen können nicht in der window
Objekt, da auf sie nicht global zugegriffen werden kann.
function a(){
{ // this is the Max Scope for let variable
let x = 12;
}
console.log(x);
}
a(); // Uncaught ReferenceError: x is not defined
Bei Verwendung var
var
und Variablen in ES5 haben in Funktionen einen Geltungsbereich, was bedeutet, dass die Variablen innerhalb der Funktion und nicht außerhalb der Funktion selbst gültig sind.
var
können die Variablen in der window
Objekt, da auf sie nicht global zugegriffen werden kann.
function a(){ // this is the Max Scope for var variable
{
var x = 12;
}
console.log(x);
}
a(); // 12
Wenn Sie mehr wissen wollen, lesen Sie weiter unten
eine der berühmtesten Interviewfragen zum Umfang kann auch die genaue Verwendung von let
y var
wie unten;
Bei der Verwendung von let
for (let i = 0; i < 10 ; i++) {
setTimeout(
function a() {
console.log(i); //print 0 to 9, that is literally AWW!!!
},
100 * i);
}
Dies liegt daran, dass bei der Verwendung von let
Für jede Schleifeniteration ist die Variable skaliert und hat ihre eigene Kopie.
Bei der Verwendung von var
for (var i = 0; i < 10 ; i++) {
setTimeout(
function a() {
console.log(i); //print 10 times 10
},
100 * i);
}
Dies liegt daran, dass bei der Verwendung von var
Für jede Schleifeniteration ist die Variable "scoped" und hat eine gemeinsame Kopie.
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.