用于javascript中的循环延迟

时间:2011-08-02 09:23:42

标签: javascript

如何设置循环执行的延迟

for(i=0; i<=10;i++){
        var s=i;//This line should execute for every 2 secs only
        }

如何在java脚本中给出循环延迟....

我不想像下面那样..我想不使用setTimeout ...

for(i=0; i<=10;i++){
        setTimeout("setvalue()",2000); //This alert should display for every 2 secs only
        }

        function setvalue()
        {
         var s=i;
        }

请帮帮我......

4 个答案:

答案 0 :(得分:9)

使用setInterval()

var i = 0;

var interval = setInterval(function(){
    setValue();
    i += 1;

    if(i == 10)
        clearInterval(interval);
}, 2000);

在没有冻结整个浏览器的情况下,无法睡眠 2秒。 Javascript是单线程的。

答案 1 :(得分:3)

你做不到。 JS在单个线程中运行,任何延迟该线程的尝试都将冻结整个页面。使用setTimeout是您唯一的选择。

编辑:或setInterval;无论哪种方式,都没有非毛茸茸的方式表达“在这里停止执行x毫秒。”

答案 2 :(得分:2)

使用setTimeout是不可避免的,但是,递归函数可能是更好的解决方案:

var i=0;
function recurs() {
    i = s;
    i++;
    if (i <= 10) recurs();
}

recurs();

答案 3 :(得分:1)

正如其他人所说的那样,setTimeout可以很好地用于处理这些场景,setInterval也可以使用,但有些人不鼓励。

您甚至可以递归调用内置setTimeout的函数,如setInterval的MDN文档中所述。那里的标题提到了“危险的用法”,但他们解决危险的方法是下面的代码块。

它提到要每隔x秒(或毫秒)执行一个循环,那么你可以执行以下操作,并确保这些函数一次只执行一个和顺序

(function loop(){
    setTimeout(function(){
        // logic here

        // recurse
        loop();

    }, 1000); // repeat loop 1 second after this branch has completed
})();

如果您希望它只执行有限次数,那么您可以在循环外创建一个变量,并且只有在计数小于您想要执行的次数时才递归执行。比如这个:

var count = 0;
(function loop() {
    setTimeout(function() {
        // logic
        count++;
        if (count < 10) {
            loop();
        }
    }, 1000);
})();