問題のコード:
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);
}
}
window.onload = addLinks;
私の問題は、返された関数がクロージャーであり、変数num
がグローバル変数であるため、関数が実行されるたびnum
に、古い値を置き換える現在の値を保持し、その値でどこでも自動的に更新する必要があるためです。しかし、これは起こっていません。各リンクをクリックすると、異なる値が得られます。なぜこうなった?