Ключове слово continue
Ключове слово continue використовується всередині циклів і означає «пропустити решту поточної ітерації та перейти до наступної». Тобто цикл не переривається повністю, як при break, а просто переходить до наступного кроку.
Теорія
TL;DR
continueпропускає весь код, що лишився в тілі ітерації, і передає керування наступній ітерації.breakзупиняє цикл повністю, аcontinueзупиняє лише поточний прохід.- Працює в усіх циклах:
for,while,do...while,for...of,for...in. Поза циклом це синтаксична помилка. - У
forпісляcontinueвиконується крок (i++), уwhileкерування одразу йде на перевірку умови. - З міткою
continue labelпереходить до наступної ітерації позначеного зовнішнього циклу. - У
forEachcontinueне працює; його роль там виконуєreturn.
Швидкий приклад
for (let i = 1; i <= 5; i++) {
if (i === 3) continue; // skip 3
console.log(i);
}Результат:
1
2
4
5Що сталося: на i = 3 спрацював continue, JavaScript пропустив console.log(i) і одразу перейшов до наступної ітерації (i = 4).
continue у while
let i = 0;
while (i < 5) {
i++;
if (i === 3) continue;
console.log(i);
}Результат:
1
2
4
5Щойно i === 3, оператор continue пропускає console.log(i), і цикл повертається до перевірки умови i < 5. Тут критично важливо, що i++ стоїть до continue: якби лічильник збільшувався в кінці тіла, continue пропускав би його і цикл став би нескінченним. У for такої проблеми немає, бо крок i++ є частиною заголовка циклу і виконується завжди.
Різниця між break і continue
| Ключове слово | Що робить |
|---|---|
break | Повністю зупиняє цикл |
continue | Пропускає решту тіла циклу і переходить до наступної ітерації |
Приклад, де вони працюють разом:
for (let i = 1; i <= 5; i++) {
if (i === 3) continue; // skip 3
if (i === 5) break; // stop the loop
console.log(i);
}Результат:
1
2
4Фільтрація ітерацій за умовою
for (let i = 1; i <= 10; i++) {
if (i % 2 === 0) continue; // skip even numbers
console.log(i);
}Результат:
1
3
5
7
9Зручно, коли дію треба виконувати лише для певних елементів. Такий «ранній вихід з ітерації» тримає основне тіло циклу без зайвої вкладеності if, тому код читається легше.
Мітки і вкладені цикли
continue можна застосовувати з міткою (label), якщо треба перейти до наступної ітерації зовнішнього циклу.
outer: for (let i = 1; i <= 3; i++) {
for (let j = 1; j <= 3; j++) {
if (j === 2) continue outer; // skip the rest of the inner loop
console.log(`i=${i}, j=${j}`);
}
}Результат:
i=1, j=1
i=2, j=1
i=3, j=1Без мітки continue завжди стосується найближчого циклу, тому вийти на рівень вище можна лише через мітку або через винесення внутрішнього циклу в окрему функцію.
Підсумкова таблиця
| Питання | Відповідь |
|---|---|
Що робить continue | Пропускає код ітерації, що лишився, і переходить до наступної |
| Де використовується | Тільки в циклах (for, while, do...while, for...of, for...in) |
Відмінність від break | break повністю зупиняє цикл |
| Робота з мітками | continue label продовжує позначений зовнішній цикл |
Типові помилки
- Ставити
continueуwhileдо збільшення лічильника і отримувати нескінченний цикл. - Очікувати, що
continueпрацює вforEachабоmap. Це методи, а не цикли; там роль пропуску виконуєreturn, а повністю перервати перебір не можна. - Плутати
continueзbreak: перший пропускає крок, другий завершує цикл. - Використовувати
continueпоза циклом, наприклад уswitchчи просто в тілі функції. ЦеSyntaxError. - Зловживати мітками: два чи три рівні вкладеності з мітками читаються гірше, ніж винесена функція з
return. - Думати, що
continueпропускає й фінальний блок ітерації на зразокtry ... finally. Блокfinallyвиконається в будь-якому разі.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.