Урок 3 из 8 · 20 мин · обновлено
Циклы: for, while и for...of
Как повторять действия: устройство цикла for, цикл while, удобный перебор через for...of, накопление суммы, break и continue.
Зачем нужны циклы
Чтобы вывести числа от 1 до 5, можно написать пять строк. Но если чисел тысяча? Цикл повторяет блок кода столько раз, сколько нужно.
Цикл for
Самый распространённый цикл:
for (let i = 1; i <= 5; i++) {
console.log(i);
}
В круглых скобках — три части через точку с запятой:
let i = 1— начало: выполняется один раз перед циклом.i <= 5— условие: проверяется перед каждым повтором. Пока оно верно, цикл продолжается.i++— шаг: выполняется после каждого повтора.i++означает «увеличить на 1».
Результат — числа от 1 до 5. Буква i — традиционное имя счётчика, но можно выбрать любое.
Накопление результата
Частая задача — посчитать сумму. Переменную заводят до цикла и на каждом шаге прибавляют к ней:
let total = 0;
for (let i = 1; i <= 100; i++) {
total += i; // то же, что total = total + i
}
console.log(total); // 5050
total объявлена через let, потому что её значение меняется.
Цикл while
while повторяет блок, пока условие верно. Он нужен, когда заранее неизвестно, сколько будет шагов:
let balance = 1000;
let months = 0;
while (balance < 2000) {
balance = balance * 1.1; // +10% в месяц
months++;
}
console.log(`Сумма удвоится через ${months} мес.`);
Здесь мы впервые использовали шаблонную строку в обратных кавычках: значение months подставилось прямо в текст. Подробнее — в следующем уроке.
Следите, чтобы условие когда-нибудь стало ложным. Иначе цикл будет бесконечным и вкладка браузера зависнет — её придётся закрыть.
Цикл for...of
Когда нужно перебрать элементы — символы строки или элементы массива, — удобнее for...of:
for (const letter of "кот") {
console.log(letter); // к, о, т
}
Счётчик не нужен: на каждом шаге в переменную попадает очередной элемент. С массивами этот цикл будет встречаться постоянно — уже в уроке 6.
break и continue
break— сразу выйти из цикла;continue— пропустить остаток текущего шага.
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 без остатка.
Решение
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 всего одна команда, фигурные скобки можно не ставить. Но в больших программах их обычно пишут всегда — так меньше шансов ошибиться.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Сколько раз выполнится тело цикла for (let i = 0; i < 4; i++)?
i примет значения 0, 1, 2 и 3. Когда i станет 4, условие i < 4 окажется ложным и цикл закончится.
-
Что делает запись i++?
i++ — короткая запись для i = i + 1. Чаще всего её ставят в третью часть цикла for.
-
Когда цикл while станет бесконечным?
while повторяет блок, пока условие верно. Если внутри цикла ничего не меняет условие, он будет крутиться бесконечно и страница зависнет.
-
Что выведет: for (const letter of 'кот') console.log(letter)?
for...of перебирает строку по символам. На каждом шаге в letter попадает очередная буква.