← 返回首页
Яке значення виведе цикл "while"?
UK

Ми хочемо зробити цей проєкт з відкритим кодом доступним для людей у всьому світі.

Допоможіть перекласти цей підручник вашою мовою!

    Пошук
    Пошук
    Світла темаТемна тема
    عربيDanskEnglishEspañolفارسیFrançaisIndonesiaItaliano日本語한국어РусскийTürkçeУкраїнськаOʻzbek简体中文
    назад до уроку

    Яке значення виведе цикл "while"?

    важливість: 4

    Запишіть для кожного циклу значення, які він виведе. Потім порівняйте з відповіддю.

    Чи виводять обидва цикли однакові значення?

    1. Префіксна форма ++i:

      let i = 0; while (++i < 5) alert( i );
    2. Постфіксна форма i++

      let i = 0; while (i++ < 5) alert( i );
    рішення

    Завдання демонструє, як префіксна/постфіксна форма можуть призвести до різних результатів при їх порівнянні.

    1. Перший цикл виведе числа від 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 не покажеться.

    2. Другий цикл виведе числа від 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) – що не вірно.