更好的辦法是「忘記了這兩個循環和遞歸」在這種情況下和使用「的setInterval」包括「setTimeout的」 S這樣的組合:
function iAsk(lvl){
var i=0;
var intr =setInterval(function(){ // start the loop
i++; // increment it
if(i>lvl){ // check if the end round reached.
clearInterval(intr);
return;
}
setTimeout(function(){
$(".imag").prop("src",pPng); // do first bla bla bla after 50 millisecond
},50);
setTimeout(function(){
// do another bla bla bla after 100 millisecond.
seq[i-1]=(Math.ceil(Math.random()*4)).toString();
$("#hh").after('<br>'+i + ' : rand= '+(Math.ceil(Math.random()*4)).toString()+' > '+seq[i-1]);
$("#d"+seq[i-1]).prop("src",pGif);
var d =document.getElementById('aud');
d.play();
},100);
setTimeout(function(){
// keep adding bla bla bla till you done :)
$("#d"+seq[i-1]).prop("src",pPng);
},900);
},1000); // loop waiting time must be >= 900 (biggest timeOut for inside actions)
}
PS:明白(setTimeout的真正行爲):它們都將在同一時間開始「三個bla bla bla將在同一時刻開始倒計時」,因此請安排執行的不同超時。
PS 2:定時循環的例子,但對於一個反應循環,你可以使用事件,答應異步等待..
的可能重複[傳遞函數setTimeout在循環中:總是最後一個值?](http://stackoverflow.com/questions/6425062/passing-functions-to-settimeout-in-a-loop-always-the-last-value) – Quentin