W documentation for the let
statement in MDN, tam ten przykładowy kod:Jak zmienne zdefiniowane przez `let` aktu wewnątrz` for` pętli
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);
}
Potem stwierdzić:
Powyższy przykład działa zgodnie z przeznaczeniem ponieważ pięć instancji funkcji wewnętrznej (anonimowej) odnosi się do pięciu różnych instancji zmiennej .
Nie rozumiem dlaczego „istnieje pięć różnych wystąpień zmiennej i
.
Pierwsze oświadczenie w for
pętli jest zawsze wykonywana raz, nie? Więc stwierdzenie let
ma tylko wykonać raz ...
po kodzie osiągnie koniec iteracji sprawdza stan w drugim komunikacie.
Jak to się stało, zgodnie z tym co piszą, jest nowa instancja i
w każdej iteracji?
Nie o to pytam, ale zdarzyło mi się przetestować to zachowanie w zeszłym tygodniu i odkryłem, że IE nie wdrożyło go prawidłowo. (Chrome tak.) – nnnnnn
W specyfikacji ECMA 6, gdy wyrażenie let jest użyte, każda iteracja tworzy nowy zakres leksykalny powiązany z poprzednim zakresem. http://www.ecma-international.org/ecma-262/6.0/#sec-for-forement-runti-semantics-labellwedvaluation –
Aby to zrozumieć , zmień 'let' na' var' i zobacz, co się dzieje po kliknięciu na elementy utworzone przez pętlę – Jamiec