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
).