Im documentation for the let
statement in MDN, gibt es in diesem Beispiel Code:Wie Variablen tut definiert mit `let` Akt in einer` for` Schleife
var list = document.getElementById("list");
for (let i = 1; i <= 5; i++) {
let item = document.createElement("li");
item.appendChild(document.createTextNode("Item " + i));
item.onclick = function (ev) {
console.log("Item " + i + " is clicked.");
};
list.appendChild(item);
}
Dann geben sie an:
Das obige Beispiel funktioniert wie beabsichtigt weil die fünf Instanzen der (anonyme) innere Funktion auf fünf verschiedene Instanzen der Variable i beziehen.
Ich verstehe nicht, warum es „fünf verschiedene Instanzen der Variablen i
.
Die erste Anweisung in einer for
Schleife immer einmal ausgeführt wird, nicht wahr? Also die let
Anweisung soll nur ausführen einmal ...
Sobald der Code erreicht das Ende der Iteration es um den Zustand in der zweiten Anweisung überprüft.
Wie kommt es, je nachdem, was sie schreiben, gibt es eine neue Instanz von i
bei jeder Iteration?
Nicht das, was Sie fragen, aber ich habe dieses Verhalten letzte Woche getestet und festgestellt, dass IE es nicht richtig implementiert. (Chrome tat.) – nnnnnn
In ECMA 6-Spezifikation, wenn der Ausdruck ist Jede Iteration erstellt einen neuen lexikalischen Bereich, der an den vorherigen Bereich angekettet ist. http://www.ecma-international.org/ecma-262/6.0/#sec-for-statement-runtime-semantics-labelledevaluation –
Um das zu verstehen ändere das 'let' in eine' var' und schau was passiert, wenn du auf die von der Schleife erzeugten Elemente klickst – Jamiec