Яке значення виведе цикл "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)– що не вірно.