Какие значения выведет цикл 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
.