Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环中的setInterval不工作_Javascript - Fatal编程技术网

Javascript for循环中的setInterval不工作

Javascript for循环中的setInterval不工作,javascript,Javascript,我想要的是一个无限循环,提醒1,2,3,1,2,3。。。间隔为2000毫秒。但它不起作用。不过控制台没有显示任何错误。这里有什么问题 for (i = 1; i <= 3; i++) { setInterval(function() { alert(i); }, 2000); if (i == 3) { i = 0; } } 对于(i=1;i您不需要为此循环,一个区间已经在无穷远处。请尝试以下方法: var i = 1;

我想要的是一个无限循环,提醒1,2,3,1,2,3。。。间隔为2000毫秒。但它不起作用。不过控制台没有显示任何错误。这里有什么问题

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

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

对于(i=1;i您不需要为此循环,一个区间已经在无穷远处。请尝试以下方法:

var i = 1;

setInterval(function() {
    alert(i);

    i++;

    if(i > 3) {
      i = 1;
    }
}, 2000);
setInterval()方法以指定的间隔(毫秒)调用函数或计算表达式

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

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

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


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

你可以让它像这样不阻塞:

function recursion () {
    for (var i = 1; i < 4; i++) {
        var num = i;
        setInterval(function() {
            console.log(String(this));
        }.bind(num), 2000);
    }
    recursion ();
}
recursion ();
函数递归(){
对于(变量i=1;i<4;i++){
var num=i;
setInterval(函数(){
log(字符串(this));
}.bind(num),2000年);
}
递归();
}
递归();
这样做可以:

var i = 0;
setInterval(function () {
    i += 1;
    if (i == 4) {
        i = 1;
    }
    alert(i);
}, 2000);
我也检查过了


它按照您的要求输出1,2,3,1,2,3…。

我最好的建议是。使用事件会标右键然后循环,
首先生成一个函数,然后在完成setInterval调用后调用下一个函数,依此类推..这就是你如何解决这个问题的方法p

“但它不工作”--这是什么意思?PS:use
while(true)
i
counter-insteadit在Chrome上没有显示任何输出情况如何
iI已经重新格式化了您的代码,这在以前的版本中很难阅读。请以后多加小心。您实际上是在创建一个无限循环,具有无限数量的警报。当我尝试在jsf中使用此功能时iddle,我的chrome窗口很快消耗了4GB内存,页面崩溃。这就是为什么你的警报无法工作,因为在一个警报显示之前,你已经创建了大量异步执行。“你不能在for循环中设置interval()---这不是真的,你可以这样做,但会发生什么?它将创建多个计时器实例..guyz试图使用setInterval进行循环。那么为什么你更喜欢循环内的setInterval?它有意义吗?“你不能在for循环内设置Interval()---关于这一点,没有任何语言限制。这个短语是错误的。
function recursion () {
    for (var i = 1; i < 4; i++) {
        var num = i;
        setInterval(function() {
            console.log(String(this));
        }.bind(num), 2000);
    }
    recursion ();
}
recursion ();
var i = 0;
setInterval(function () {
    i += 1;
    if (i == 4) {
        i = 1;
    }
    alert(i);
}, 2000);