Почему мой JavaScript для цикла не работает? - PullRequest
0 голосов
/ 06 января 2012

fourЯ пишу 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 достигнет четырех. Вместо этого журнал показывает init fired десять раз. Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 06 января 2012

Я думаю, тебе нужно вот так

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, интервал будет очищен.

2 голосов
/ 06 января 2012

Каждый раз, когда запускается обработчик тайм-аута, он запускает «i» обратно с нуля.

Проблема с вашим циклом «for» в основном заключается в том, что вы не должны использовать цикл «for»: -)

Эти 10 итераций происходят при первом проходе через функцию.После этого первого прохода «i» будет равно 10, поэтому условие «если» отменит таймаут.Однако эта проверка «если» выполняется только в начале функции, поэтому цикл всегда будет завершать 10 итераций.

Если вы хотите иметь только четыре итерации таймера (или пять или что-то еще),Вы просто отключили бы цикл for и добавили i++; после сообщения журнала консоли.Таким образом, при запуске таймер выдаст один вывод журнала, а когда это произойдет столько раз, сколько вы захотите, он остановится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...