Яке значення виведе цикл "while"?
Запишіть для кожного циклу значення, які він виведе. Потім порівняйте з відповіддю.
Чи виводять обидва цикли однакові значення?
-
Префіксна форма
++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
, і після цього повертає нове значення. Відповідно, перше порівняння буде1 < 5
іalert
виведе1
.Далі йдуть
2, 3, 4…
– значення показуються одне за одним. Порівняння завжди відбувається зі збільшеним значенням, тому що++
стоїть перед змінною.Наприкінці, коли
i = 4
збільшується до5
, умоваwhile(5 < 5)
не справджується, і в результаті цикл зупиняється. Отже,5
не покажеться. -
Другий цикл виведе числа від 1 до 5
let i = 0; while (i++ < 5) alert( i );
Перше значення знову
i = 1
. Постфіксна формаi++
збільшуєi
до1
і повертає старе значення, тому порівнянняi++ < 5
буде виконуватися зi = 0
(на противагу++i < 5
).Далі йде виклик
alert
. Однак, це вже інший вираз, який виконується після збільшенняi
та порівняння. Тому він отримає поточне значенняi = 1
.Далі слідують
2, 3, 4…
.Зупинимося на
i = 4
. Префіксна форма++i
збільшила бi
до5
і використала це значення в порівнянні. Проте ми маємо постфіксну формуi++
. Отже, вона збільшитьi
до5
, але поверне старе значення. Таким чином порівняння будеwhile(4 < 5)
– що вірно, а тому відбудеться викликalert
.Значення
i = 5
буде останнім, тому що наступний крок вже будеwhile(5 < 5)
– що не вірно.