为什么我的JavaScript for循环无法正常工作?
fourI我写了一个循环javascript和我肯定已经做了可怕的工作:为什么我的JavaScript for循环无法正常工作?
init = function() {
var i = 0;
timer = setInterval(function() {
if (i >= 4) {
clearInterval(timer);
return;
}
for (i = 0; i < 10; i++) {
console.log('init fired');
}
}, 2000);
};
init();
我要的是定时器在for
循环的i
变量达到四后停止。相反,日志会显示init fired
十次。我究竟做错了什么?
每次超时处理程序运行时,都会将“i”开始回零。
的问题你的“for”循环基本上,你不应该使用“for”循环:-)
这10次迭代发生在第一次通过该功能。第一遍之后,“我”将是10,所以“如果”条件将取消超时。但是,该“if”检查仅在函数的开始处进行,因此循环将始终完成10次迭代。
如果您只想定时器(或五个或其他)的四次迭代,您只需要停止“for”循环,并在控制台日志消息之后添加i++;
。这样,计时器在运行时会发出一个日志输出,当发生这种情况时,您希望的次数会停止。
啊我正在寻找那种解释。现在我懂了。 – 2012-01-06 14:41:36
我认为你需要像这样
var i=0; //Global Declaration
init = function(){
timer = setInterval(function(){
console.log('init fired');
i++;
if(i>4){
clearInterval(timer);
return; }
}, 2000);
};
init();
希望这能解决你的问题。这将触发init()方法四次,如果你已经预期到了,并且如果我到达了4,那么间隔将被清除。
是的,这也是。你能告诉我为什么'我'变量需要全球? – 2012-01-06 14:45:05
因为当我被设置为全局唯一时,它的值将不会受到干扰,否则每次调用init时都会将其设置为零。所以增量选项对i没有影响 – AmGates 2012-01-06 14:51:32
它不是很清楚你在问什么 – 2012-01-06 14:27:39
@ DanielA.White我在问:我如何获得'init fired'只输出到控制台四次? – 2012-01-06 14:30:09
我想根据一定的条件来中断setInterval定时器。 – 2012-01-06 14:30:53