У меня есть следующий фрагмент кода.
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function () {
alert(i);
};
document.body.appendChild(link);
}
}
Вышеприведенный код предназначен для создания 5 ссылок и привязки каждой ссылки к событию оповещения, чтобы показать текущий идентификатор ссылки. Но это не сработает. Когда вы нажимаете сгенерированные ссылки, все говорят "link 5".
Но следующий фрагмент кода работает как наше ожидание.
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function (num) {
return function () {
alert(num);
};
}(i);
document.body.appendChild(link);
}
}
Вышеуказанные 2 фрагмента цитируются из здесь. Как объясняет автор, кажется, что закрытие делает магию.
Но как это работает и как закрытие заставляет его работать, все это выходит за рамки моего понимания. Почему первый не работает, пока работает второй? Может ли кто-нибудь дать подробное объяснение о магии?
спасибо.