Урок 3 из 8 · 20 мин · обновлено

Циклы: for, while и for...of

Как повторять действия: устройство цикла for, цикл while, удобный перебор через for...of, накопление суммы, break и continue.

Зачем нужны циклы

Чтобы вывести числа от 1 до 5, можно написать пять строк. Но если чисел тысяча? Цикл повторяет блок кода столько раз, сколько нужно.

Цикл for

Самый распространённый цикл:

JavaScript
for (let i = 1; i <= 5; i++) {
  console.log(i);
}

В круглых скобках — три части через точку с запятой:

  1. let i = 1 — начало: выполняется один раз перед циклом.
  2. i <= 5 — условие: проверяется перед каждым повтором. Пока оно верно, цикл продолжается.
  3. i++ — шаг: выполняется после каждого повтора. i++ означает «увеличить на 1».

Результат — числа от 1 до 5. Буква i — традиционное имя счётчика, но можно выбрать любое.

Накопление результата

Частая задача — посчитать сумму. Переменную заводят до цикла и на каждом шаге прибавляют к ней:

JavaScript
let total = 0;

for (let i = 1; i <= 100; i++) {
  total += i;   // то же, что total = total + i
}

console.log(total);   // 5050

total объявлена через let, потому что её значение меняется.

Цикл while

while повторяет блок, пока условие верно. Он нужен, когда заранее неизвестно, сколько будет шагов:

JavaScript
let balance = 1000;
let months = 0;

while (balance < 2000) {
  balance = balance * 1.1;   // +10% в месяц
  months++;
}

console.log(`Сумма удвоится через ${months} мес.`);

Здесь мы впервые использовали шаблонную строку в обратных кавычках: значение months подставилось прямо в текст. Подробнее — в следующем уроке.

Следите, чтобы условие когда-нибудь стало ложным. Иначе цикл будет бесконечным и вкладка браузера зависнет — её придётся закрыть.

Цикл for...of

Когда нужно перебрать элементы — символы строки или элементы массива, — удобнее for...of:

JavaScript
for (const letter of "кот") {
  console.log(letter);   // к, о, т
}

Счётчик не нужен: на каждом шаге в переменную попадает очередной элемент. С массивами этот цикл будет встречаться постоянно — уже в уроке 6.

break и continue

  • break — сразу выйти из цикла;
  • continue — пропустить остаток текущего шага.
JavaScript
for (let n = 1; n < 10; n++) {
  if (n % 2 === 0) continue;   // чётные пропускаем
  if (n > 7) break;            // дальше 7 не идём
  console.log(n);              // 1, 3, 5, 7
}

Попробуйте сами. Выведите таблицу умножения на 7 в виде 7 x 1 = 7 … 7 x 10 = 70. Затем посчитайте, сколько чисел от 1 до 100 делятся на 3 без остатка.

Решение
JavaScript
for (let i = 1; i <= 10; i++) {
  console.log("7 x " + i + " = " + 7 * i);
}

let count = 0;
for (let n = 1; n <= 100; n++) {
  if (n % 3 === 0) count++;
}
console.log(count);   // 33

Если в блоке после if всего одна команда, фигурные скобки можно не ставить. Но в больших программах их обычно пишут всегда — так меньше шансов ошибиться.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Сколько раз выполнится тело цикла for (let i = 0; i < 4; i++)?

  2. Что делает запись i++?

  3. Когда цикл while станет бесконечным?

  4. Что выведет: for (const letter of 'кот') console.log(letter)?