为什么我的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十次。我究竟做错了什么?

+0

它不是很清楚你在问什么 – 2012-01-06 14:27:39

+0

@ DanielA.White我在问:我如何获得'init fired'只输出到控制台四次? – 2012-01-06 14:30:09

+0

我想根据一定的条件来中断setInterval定时器。 – 2012-01-06 14:30:53

每次超时处理程序运行时,都会将“i”开始回零。

的问题你的“for”循环基本上,你不应该使用“for”循环:-)

这10次迭代发生在第一次通过该功能。第一遍之后,“​​我”将是10,所以“如果”条件将取消超时。但是,该“if”检查仅在函数的开始处进行,因此循环将始终完成10次迭代。

如果您只想定时器(或五个或其他)的四次迭代,您只需要停止“for”循环,并在控制台日志消息之后添加i++;。这样,计时器在运行时会发出一个日志输出,当发生这种情况时,您希望的次数会停止。

+0

啊我正在寻找那种解释。现在我懂了。 – 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,那么间隔将被清除。

+0

是的,这也是。你能告诉我为什么'我'变量需要全球? – 2012-01-06 14:45:05

+0

因为当我被设置为全局唯一时,它的值将不会受到干扰,否则每次调用init时都会将其设置为零。所以增量选项对i没有影响 – AmGates 2012-01-06 14:51:32