for循环中的setInterval不起作用

时间:2014-02-08 04:43:55

标签: javascript

我想要的是一个无限循环,它以1,200毫秒的间隔警告1,2,3,1,2,3 .......但它不起作用。虽然控制台没有显示任何错误。这有什么问题?

for (i = 1; i <= 3; i++) {
    setInterval(function() {
        alert(i);
    }, 2000);

    if (i == 3) {
        i = 0;
    }
}

5 个答案:

答案 0 :(得分:1)

这样做:

var i = 0;
setInterval(function () {
    i += 1;
    if (i == 4) {
        i = 1;
    }
    alert(i);
}, 2000);

我也检查过它。

根据您的要求输出1,2,3,1,2,3 ....

答案 1 :(得分:0)

你不需要一个循环,一个间隔已经无限地进行。试试这个:

var i = 1;

setInterval(function() {
    alert(i);

    i++;

    if(i > 3) {
      i = 1;
    }
}, 2000);

答案 2 :(得分:0)

   you can not setInterval() inside a for loop because it will create multiple timer instance.

setInterval()方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。

  

setInterval()方法将继续调用该函数,直到调用clearInterval()或窗口关闭。

setInterval()返回的ID值用作clearInterval()方法的参数。

提示:要在指定的毫秒数后执行一次函数,请使用setTimeout()方法。

    var i = 0
    function test() {
        i = i % 3; 
        ++i;
        alert(i);
    };

    setInterval('test()', 2000);

答案 3 :(得分:0)

这不起作用的原因是因为您在阻塞状态下进入无限循环,这意味着在浏览器忙于循环时从不输入间隔。想象一下,浏览器一次只能做一件事,就像在一个线程中一样,所以循环就是它,在它完成之前不能做任何事情,而在你的情况下它永远不会,因此间隔在等待轮到,它永远不会得到。

你可以像这样阻止它:

function recursion () {
    for (var i = 1; i < 4; i++) {
        var num = i;
        setInterval(function() {
            console.log(String(this));
        }.bind(num), 2000);
    }
    recursion ();
}
recursion ();

答案 4 :(得分:0)

我最好的建议是。使用事件会标的righterthen循环, 首先创建一个函数,然后在完成对下一个函数的setInterval调用后,依此类推..这就是您可以解决此p

的方法