Какие значения выведет цикл while?
Для каждого цикла запишите, какие значения он выведет. Потом сравните с ответом.
Оба цикла выводят alert с одинаковыми значениями или нет?
-
Префиксный вариант
++i:let i = 0; while (++i < 5) alert( i ); -
Постфиксный вариант
i++let i = 0; while (i++ < 5) alert( i );
Задача демонстрирует, как постфиксные/префиксные варианты могут повлиять на результат, когда используются в сравнениях.
-
От 1 до 4
let i = 0; while (++i < 5) alert( i );Первое значение:
i = 1, так как операция++iсначала увеличитi, а потом уже произойдёт сравнение и выполнениеalert.Далее
2, 3, 4…Значения выводятся одно за другим. Для каждого значения сначала происходит увеличение, а потом – сравнение, так как++стоит перед переменной.При
i = 4произойдёт увеличениеiдо5, а потом сравнениеwhile (5 < 5)– это неверно. Поэтому на этом цикл остановится, и значение5выведено не будет. -
От 1 до 5
let i = 0; while (i++ < 5) alert( i );Первое значение:
i = 1. Остановимся на нём подробнее. Операторi++увеличиваетi, возвращая старое значение, так что в сравненииi++ < 5будет участвоватьi = 0(в отличие от++i < 5).Но последующий вызов
alertуже не относится к этому выражению, так что получит новыйi = 1.Далее следуют
2, 3, 4….Остановимся на
i = 4. Префиксная форма++iувеличила быiи использовала бы в сравнении5. Но здесь мы имеем постфиксную формуi++, поэтому она увеличиваетiдо5, но возвращает старое значение. Таким образом, сравнение фактически равноwhile (4 < 5)–true, поэтому срабатываетalert.Значение
i = 5– последнее, так как на следующем шагеwhile (5 < 5)–false.