setInterval/setTimeOut函数与for循环显示意外的结果
问题描述:
for (var i = 0; i <= 2; ++i) {
display_para(i);
};
function display_para(i){
setInterval(function(){
console.log(i);
//Stuff to be done
}, 1500 + i * 2000);
};
Expected result:
0 1 2 ; 0 1 2; 0 1 2 and so on.
而它显示不同的输出,如截图所示。setInterval/setTimeOut函数与for循环显示意外的结果
我不明白我要去哪里错了。
答
这是因为您如何设置定时器,0
调用将在每隔5500ms每调用一次,每调用一次1500ms,调用1
,调用2
。
一种解决方案是使用地方根据你决定的值的计数器一个inteval
要打印像
var i = 0;
setInterval(function() {
display_para(i);
if (++i > 2) {
i = 0;
}
}, 1500);
function display_para(i) {
document.body.innerHTML += i + '<br />'
};
+0
非常感谢! –
答
你可能需要这样:
var i = -1;
setInterval(function() {
i = i > 1 ? 0 : ++i;
console.log(i);
}, 1500)
答
因为有三个setInterval()
以不同的时间间隔同时运行,所以不能指望序列号为0 1 2
。这是唯一可能的,如果时间间隔是否均匀,如:
function display_para(i) {
setInterval(function() {
console.log(i);
}, 200);
};
答
for循环扩展为:
display_para(0);
display_para(1);
display_para(2);
创建setInterval定时器:
log 0 every 1500 ms
log 1 every 3500 ms
log 2 every 5500 ms
所以
timer 0 fires at: 1500 3000 4500 6000 7500
timer 1 fires at: 3500 7000
timer 2 fires at: 5500
给予
Expected result: 0 0 1 0 2 0 1 0
每1.5秒会输出0。每3.5秒一个1,每5.5秒一个2 ...时间相互独立(即一个间隔不等待另一个时间) –