alex-lenk
@alex-lenk
Разработчик сайтов

Когда циклы в JS присваивают единицу после выполнения итерации?

Любопытство по будило задать вопрос:

for (var i = 0; i <= 3; i++) {
    alert(i);
}
alert('i равна = ' + i);


Переменная i будет видна и за границами цикла, в частности, после окончания цикла i станет равно 4.
Вопрос почему 4, тогда как я насчитал 4 итерации (0, 1, 2, 3), последняя цифра 3, в какой момент происходит прибавление единицы к 3, что последний alert вне цикла показывает цифру 4?
  • Вопрос задан
  • 345 просмотров
Решения вопроса 1
@WQP
После выполнения в {} будет i++, в условии сказано что если i < 3, то останавливаем. Следовательно когда i = 4, то цикл не выполняется по условию
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
riot26
@riot26
<:З )~~
final-expression выполняется после каждой операции:
i=0; i<=3 true; i=1
i<=3 true; i=2
i<=3 true; i=3
i<=3 true; i=4
i<=3 false; больше не выполняем блок
Ответ написан
Комментировать
@vivcogit
JS разработчик
для выхода из цикла должно перестать выполняться условие цикла, а значит инкрементация выполняется после тела цикла.
общая схема работы цикла:
1)инитициализация (var i = 0)
2)проверка условия i <= 3, если выполняется условие то переход на шаг 3, иначе выход из цикла
3)тело цикла
4)действие из объявления цикла (i++)
5)переход на шаг 2
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Цикл можно представить вот таким образом:
var i = 0;
while (i <= 3) {
    alert(i);
    i++
}
alert('i равна = ' + i);

При такой записи поведение становится яснее - когда i становится равной трём, в цикл мы заходим, увеличиваем i до четырёх и больше в цикл уже не попадаем.

В целом, использовать счётчик цикла за его пределами - это очень плохая идея. Ниже Женя Первак показал, как это лучше делать в современном js - там вы просто не сможете обратиться к этой переменной.
Ответ написан
Комментировать
diZZineSS
@diZZineSS
студент
это из за области видимости, var создает глобальную переменную

вот так попробуй:

for (let i = 0; i <= 3; i++) {
alert(i);
}
alert('i равна = ' + i);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы