Javascript цикл с предупреждением

Привет меня смущает alert а также console.log

var count = [];

function iterate(number) {
  count.push(number);
  for (i = 0; i < count.length; i++) {
    console.log(count[i]);
  }
}

iterate(2);
iterate(3);
iterate(4);

Консоль выдаст мне 2,2,3,2,3,4, но когда я изменю console.log(count[i]) на alert(count[i]); это будет повторяться всего 2 три раза, почему?

var count = [];

function iterate(number) {
  count.push(number);
  for (i = 0; i < count.length; i++) {
    alert(count[i]);
  }
}

iterate(2);
iterate(3);
iterate(4);

Это не делает это выше, но это делает на JSBin.

1 ответ

Решение

Обе версии показывают одно и то же.

count начинается пусто.

На первый звонок нажимаешь 2 в count так оно и есть [2], а затем цикл только один раз (i == 0), вывод count[0] (что 2).

На второй звонок нажимаешь 3 в count так оно и есть [2, 3] в нем и цикл дважды (i == 0, i == 1), показывая count[0] (2) и count[1] (3).

На третий звонок нажимаешь 4 в count так оно и есть [2, 3, 4] в ней и зациклишься три раза (i == 0, i == 1, i == 2), показывая count[0] (2), count[1] (3) и count[2] (4).


Re ваш комментарий:

Я имею в виду, когда я пробую это в JS Bin(тип оповещения), он просто предупредит 2 при первом, втором и третьем вызове

Ах! Вы сталкиваетесь с "защитой от бесконечного цикла" JSBin. Если вы запустите его здесь и посмотрите в веб-консоли, вы увидите

Выход из потенциального бесконечного цикла в строке 5. Чтобы отключить защиту от петель: добавьте "// noprotect" в свой код

... но если вы запустите выходную страницу этого, он показывает полный результат.

alert версия активирует защиту от бесконечного цикла в режиме dev, потому что один и тот же код встречается более одного раза, но с интервалом более 100 мс (из-за задержки при отклонении alert).

Другие вопросы по тегам