我正在 Fiddle中测试闭包。
以下代码打印i
的所有0-9
值,但是随机顺序。
for (var i = 0; i < 10; i++) {
(function (i) {
setTimeout(function () {
alert(i);
}, 2000);
})(i);
}
如何解决此问题,即按正确顺序打印i
值?
问题不是针对任何应用程序/程序,而是出于好奇。
更新:
仅在 Google Chrome 中发生。
答案 0 :(得分:1)
确实,在Chrome中,它会以随机顺序提醒他们。我只是通过添加i
来修复它,显然然后正确地命令了警报队列:
for (var i = 0; i < 10; i++) {
(function (i) {
setTimeout(function () {
alert(i);
}, 2000+i);
})(i);
}
答案 1 :(得分:1)
您是否尝试每2000毫秒提醒一次?如果是这样,试试这个:
function printNum(i, max) {
alert(i);
if (i == max) return;
setTimeout(function () {
printNum(i + 1, max);
}, 2000);
}
printNum(0, 10);
否则,如果你想在2000毫秒之后一个接一个地提醒他们:
function printNum(i, max) {
alert(i);
if (i == max) return;
printNum(i + 1, max);
}
setTimeout(function () { printNum(0, 10); }, 2000);