Javascript 使用正确的值打印警报()

Javascript 使用正确的值打印警报(),javascript,closures,Javascript,Closures,我在中测试闭包 以下代码以随机顺序打印0-9中的所有i值 for(变量i=0;i

我在中测试闭包

以下代码以随机顺序打印
0-9
中的所有
i

for(变量i=0;i<10;i++){
(职能(一){
setTimeout(函数(){
警报(一);
}, 2000);
})(i) );
}
如何克服这个问题,即以正确的顺序打印
I

这个问题不是针对任何应用程序/程序的,只是出于好奇

更新


只发生在谷歌Chrome上。

事实上,在Chrome上,它会以随机顺序提醒用户。我只是通过将
I
添加到时间中来修复它,显然警报队列的顺序正确:

for (var i = 0; i < 10; i++) {
    (function (i) {
        setTimeout(function () {
            alert(i);
        }, 2000+i);
    })(i);
  }
for(变量i=0;i<10;i++){
(职能(一){
setTimeout(函数(){
警报(一);
},2000+i);
})(i) );
}

您是否试图每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);

我没有看到您的问题,代码的格式正确,可以按正确的顺序打印!为了我,你看到了不同的行为吗?@atmd。是的,它按随机顺序为我打印。你能试2-3次吗,如果它仍然以正确的顺序打印,我想问题在于其他。它在firefox中运行良好,在Chrome中以随机顺序打印。如果你使用
console.log(I)
而不是
alert
你会看到它不是以随机顺序打印的,因此,我认为问题在于浏览器,它根据调用时间显示警报:最近的警报将首先显示,然后将继续显示未显示的警报,即使它们被调用较早。运行此3或4次,它仍将返回随机顺序。此操作有效@卢特:战利品。我跑了很多次。我得到了正确的订单和战利品。奇怪的浏览器问题。可能与版本有关:)您的第二个解决方案正是我想要的。我正在尝试的简单解决方法。
function printNum(i, max) {
    alert(i);
    if (i == max) return;

    printNum(i + 1, max);
}

setTimeout(function () { printNum(0, 10); }, 2000);