四我正在写一个循环的javascript,我肯定做了一个糟糕的工作:
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();
我希望定时器在i
循环中的for
变量达到4之后停止。相反,日志显示init fired
十次。我做错了什么?
答案 0 :(得分:3)
我认为你需要这样的
var i=0; //Global Declaration
init = function(){
timer = setInterval(function(){
console.log('init fired');
i++;
if(i>4){
clearInterval(timer);
return; }
}, 2000);
};
init();
希望这能解决您的问题。这将按预期触发init()方法四次,如果i达到4,则将清除间隔。
答案 1 :(得分:2)
每次超时处理程序运行时,它都会从“i”开始返回零。
你的“for”循环的问题基本上是你不应该使用“for”循环: - )
这10次迭代是在第一次通过函数时发生的。在第一遍之后,“i”将为10,因此“if”条件将取消超时。但是,“if”检查仅在函数的开头进行,因此循环将始终完成10次迭代。
如果你想只有四次迭代的计时器(或五次或其他),你只需要离开“for”循环,并在控制台日志消息后添加i++;
。这样,计时器会在运行时发出一个日志输出,当发生这种情况时,它会停止。