Nel documentation for the let
statement in MDN, c'è questo codice di esempio:Come funziona variabili definite con `atto let` all'interno di un` ciclo for`
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);
}
Poi affermare:
L'esempio precedente funziona come previsto poiché le cinque istanze della funzione interna (anonima) si riferiscono a cinque diverse istanze della variabile i.
Non capisco il motivo per cui ci sono "cinque diverse istanze della variabile i
.
La prima istruzione in un ciclo for
viene sempre eseguita una volta, no? Quindi la dichiarazione let
si suppone che solo l'esecuzione una volta ...
volta che il codice raggiunge la fine del ciclo si verifica la condizione nella seconda istruzione.
Come mai, secondo quello che scrivono, c'è una nuova istanza di i
ad ogni iterazione?
Non è quello che chiedi, ma mi è capitato di testare questo comportamento la scorsa settimana e ho scoperto che IE non l'ha implementato correttamente. (Lo ha fatto Chrome.) – nnnnnn
Nella specifica ECMA 6, quando l'espressione let è usato, ogni iterazione crea un nuovo ambito lessicale incatenato all'ambito precedente http://www.ecma-international.org/ecma-262/6.0/#sec-for-statement-runtime-semantics-labelledevaluation –
Per capire questo , cambia quel 'let' in un' var' e vedi cosa succede quando fai clic sugli elementi creati dal ciclo – Jamiec