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