可以使用一個封閉件,使得在使用的i
正確的值:
for (i = 0; i < 5; i++) {
(function (i) {
if (i % 2 == 0) setTimeout(function() {
divId = document.getElementById("withTimeOut");
divId.innerHTML += i+" ";
}, 3000);
})(i);
}
for (i = 0; i < 5; i++) {
if (i % 2 == 0){
divId = document.getElementById("withOutTimeOut");
divId.innerHTML += i+" ";
}
}
(JSFiddle here)
這導致您的兩個輸出顯示相同的值。但你是否希望數字出現在彼此之後3秒?如果是這樣,情況有點不同。
如果你想的數字後,其他出現一個,你可以這樣做:
(function display(i, step, max) {
setTimeout(function() {
divId = document.getElementById("withTimeOut");
divId.innerHTML += i+" ";
i += step;
if(i <= max) display(i,step,max);
}, 3000);
})(0,2,4);
(JSFiddle)
的display
功能是遞歸的,自稱顯示後,每3秒以前的號碼,只要i <= 4
。圍繞整個事物的(...)(0, 2, 4)
意味着立即調用該函數,參數爲(0, 2, 4)
。
你需要使用閉包,而不是'暫停'當前線程http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –
就目前來看,目前還不清楚你在做什麼。你的問題只是「我」的價值不是你想要的嗎?你想暫停執行腳本的其餘部分嗎?你想讓數字一個接一個地出現嗎? –
如果你的問題是,要暫停*循環本身*,那麼這可能是你所追求的:我如何加入一個JavaScript循環延遲(http://stackoverflow.com/a/3583740/1446005) – RandomSeed