2013-05-05 124 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