@rinatoptimus

Почему цикл for работает так?

for (i = 0; i < 5; i++) {
  console.log(i);
}
console.log('after loop', i);

Почему console.log('after loop', i); выводит after loop 5, а не after loop 4?
  • Вопрос задан
  • 590 просмотров
Пригласить эксперта
Ответы на вопрос 5
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что последняя часть блока for выполняется в самом конце 4-ой итерации и только после этого срабатывает следующая проверка, которая завершает цикл.
Возможно, вам станет яснее, если оформить эту логику иначе:
var i = 0;

while (true) {
  if (i >= 5) {
    // Здесь i равен 5
    break;
  }

  console.log(i);

  i++; // в тот момент, когда i становится равным 4-ём, цикл ещё работает и инкремент выполняется
}

console.log('after loop', i);
Ответ написан
Комментировать
@akass
Developer
И что странного? Вывел 4, сделал инкремент, проверил условие, вышел. Но после инкремента уже 5. https://learn.javascript.ru/while-for
Ответ написан
abyrkov
@abyrkov
JavaScripter
Все очень просто for это
for(инициализация; проверка; изменение) действие;
Так вот, он работает так -
  1. Инициализация
  2. Проверка
    Если проверка - false - закончить цикл
    Иначе - продолжить
  3. Действие
  4. Изменение - далее опять на 2

После 4того раза мы прибавляем к i 1. Ясен пень, она становится 5. После чего проверка нам дает false и цикл прекращается. Но 5-то никуда не делась?

Если вы все-равно ничего не поняли, объясню проще.
Чтобы цикл прекратился проверка должна вернуть false, верно? Т.к. 4 удовлетворяет она будет напечатана в цикле , улавливаете? 4++ - это уже 5. А 5 < 5 возвратит false. Если она вернется в 4 - то цикл просто не сможет закончится... то она должна снаружи не удовлетворять проверку.

PS Странно, что у вас он вообще работает - область видимости i - только в цикле.
Ответ написан
evgeniy8705
@evgeniy8705
Повелитель вселенной
Жизненный цикл переменной i из вашего примера:
1. i = 0 (Удовлетворяет условию)
2. i = 1 (Удовлетворяет условию)
3. i = 2 (Удовлетворяет условию)
4. i = 3 (Удовлетворяет условию)
5. i = 4 (Удовлетворяет условию)
6. i = 5 (Не удовлетворяет условию) 5 не меньше 5. Выходим из цикла.
7. Выводим в консоль i. Смотрим на последнюю (шестую) итерацию. i = 5. Выводится 5.
Ответ написан
@sitev_ru
sitev.ru - мой блог ...
Заменил for на while - стало понятнее...
var i = 0;
while (i < 5) {
  console.log(i);
  i++;
}
console.log('after loop', i);

Выход из цикла если 5 < 5
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы