В documentation for the let
statement in MDN, есть этот пример код:Как переменные, определенный с помощью `let` действует внутри` 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);
}
Затем они заявляют:
В приведенном выше примере работ по назначению потому что пять экземпляров внутренней функции (анонимный) относятся к пяти различным экземплярам переменной i.
Я не понимаю, почему есть «пять различных экземпляров переменной i
.
Первое заявление в for
цикла всегда выполняется один раз, нет? Так let
оператор должен выполнять только один раз ...
После того, как код достигает конца итерации он проверяет состояние во втором сообщении.
Каким образом, согласно тому, что они пишут, что есть новый экземпляр i
на каждой итерации?
Не то, о чем вы просите, но на прошлой неделе мне удалось проверить это поведение и обнаружил, что IE не реализовал его должным образом (Chrome сделал.) – nnnnnn
В спецификации ECMA 6, когда выражение let каждая итерация создает новую лексическую область, привязанную к предыдущей области. http://www.ecma-international.org/ecma-262/6.0/#sec-for-statement-runtime-semantics-labelled_оценка –
Чтобы понять это , измените это 'let' на' var' и посмотрите, что происходит, когда вы нажимаете на элементы, созданные в цикле – Jamiec