2013-05-05 93 views
0

我有一個延遲循環工作,顯示數字0-3與1秒的延遲,但我希望它然後再次啓動此過程。在JavaScript中延遲'for循環'

我試圖把整個代碼爲while循環隨x (的東西,絕不會因此出現使循環重複永遠) 這似乎並不奏效

下面是代碼:

sequence=["0","1","2","3"]; 

while (x<99) { 
x=-1; 
(function myLoop (i) {   
    setTimeout(function() { 
    x++; 
    document.write(sequence[x] + "<br/>"); 
    if (--i) myLoop(i); 
    }, 1000) 
    })(4); 
} 

Here is a code-pen link

是否有人可以幫忙嗎?

感謝

回答

4

在這種情況下循環不起作用。有多種方法可以做到這一點。一個是「遞歸地」調用setTimeout,在每次調用時增加索引。

var sequence=["0","1","2","3"]; 

(function() { // some boilerplate code to keep `i` private 
    var i = 0; // running index 
    (function run() { 
     console.log(sequence[i]); 
     i = (i+1) % sequence.length; // increase `i` and wrap around 
     setTimeout(run, 1000); // next iteration 
    }()); 
}()); 
+0

我剛剛試過你的腳本,什麼也沒發生 – 2013-05-05 22:39:24

+1

@Caedan:你必須看看控制檯! – 2013-05-05 22:41:52

+0

@ alex23:是的,我猜'setInterval'可以很好地工作。就我個人而言,當使用'setInterval'進行遞歸時,我覺得我可以更好地控制整個過程。我也更習慣於(與Ajax調用結合使用)。我想可以歸結爲你是否想要在最後一次運行後每隔x秒或x秒嚴格執行代碼。在某些應用中可能會有所不同。 – 2013-05-05 22:43:09