我想要的是一个无限循环,它以1,200毫秒的间隔警告1,2,3,1,2,3 .......但它不起作用。虽然控制台没有显示任何错误。这有什么问题?
for (i = 1; i <= 3; i++) {
setInterval(function() {
alert(i);
}, 2000);
if (i == 3) {
i = 0;
}
}
答案 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)