使用适当的值打印alert()

时间:2015-05-21 07:23:38

标签: javascript closures

我正在 Fiddle中测试闭包。

以下代码打印i的所有0-9值,但是随机顺序

for (var i = 0; i < 10; i++) {
    (function (i) {
        setTimeout(function () {
            alert(i);
        }, 2000);
    })(i);
  }

如何解决此问题,即按正确顺序打印i值?

问题不是针对任何应用程序/程序,而是出于好奇。

更新

仅在 Google Chrome 中发生。

2 个答案:

答案 0 :(得分:1)

确实,在Chrome中,它会以随机顺序提醒他们。我只是通过添加i来修复它,显然然后正确地命令了警报队列:

for (var i = 0; i < 10; i++) {
    (function (i) {
        setTimeout(function () {
            alert(i);
        }, 2000+i);
    })(i);
  }

https://jsfiddle.net/hqphbhx3/5/

答案 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);