setInterval/setTimeOut函数与for循环显示意外的结果

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循环显示意外的结果

enter image description here

我不明白我要去哪里错了。

+3

每1.5秒会输出0。每3.5秒一个1,每5.5秒一个2 ...时间相互独立(即一个间隔不等待另一个时间) –

这是因为您如何设置定时器,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