本页讨论臭名昭著的循环问题:
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);
}
}
window.onload = addLinks;
一个解决方案:
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;
这是我的问题:如果您正在调用的函数在父函数之外(例如,在 addLinks 之外),臭名昭著的循环问题仍然是一个问题吗?
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = Outside(i);
document.body.appendChild(link);
}
}
function Outside(i) {
alert(i);
};
window.onload = addLinks;
我认为这会是因为当 onclick 被作为函数调用时 addLinks 尚未创建,所以问题已被创建。因此,将函数放在 addLInks 之外应该可以缓解臭名昭著的循环问题,不是吗?