为什么我的javascript for循环不起作用?

时间:2012-01-06 14:26:03

标签: javascript for-loop

四我正在写一个循环的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十次。我做错了什么?

2 个答案:

答案 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++;。这样,计时器会在运行时发出一个日志输出,当发生这种情况时,它会停止。

相关问题