Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Управление циклом

Иногда цикл не нужно проходить до конца: искомое уже найдено, или текущий элемент надо пропустить. Для этого есть две команды — break и continue. Они работают во всех циклах: for, while и for...of.

break

Команда break немедленно завершает цикл. Программа продолжает работу с кода, который идёт после цикла:

for (let i = 1; i <= 10; i++) {
  if (i === 4) {
    break;
  }
  console.log(i);
}
// 1
// 2
// 3

Хотя условие цикла разрешало дойти до 10, на четвёрке он остановился.

continue

Команда continue пропускает остаток текущей итерации и сразу переходит к следующей. Цикл при этом не прекращается:

for (let i = 1; i <= 5; i++) {
  if (i % 2 === 0) {
    continue;
  }
  console.log(i);
}
// 1
// 3
// 5

Чётные числа пропускаются: для них console.log не выполняется.

Поиск с break

Чаще всего break используют при поиске: как только нужное найдено, проверять остальное незачем. Результат поиска сохраняют в переменную, объявленную до цикла:

let found = 0;
 
for (let n = 50; n <= 100; n++) {
  if (n % 7 === 0) {
    found = n;
    break;
  }
}
 
console.log(found); // 56

Цикл нашёл первое число от 50, которое делится на 7, и сразу остановился.

Вложенные циклы

Цикл можно поместить внутрь другого цикла — такие циклы называют вложенными. На каждую итерацию внешнего цикла внутренний проходит полностью:

for (let row = 1; row <= 2; row++) {
  for (let col = 1; col <= 3; col++) {
    console.log(`${row}-${col}`);
  }
}
// 1-1
// 1-2
// 1-3
// 2-1
// 2-2
// 2-3

Так перебирают таблицы, клетки игрового поля и все пары значений.

break во вложенных циклах

break завершает только тот цикл, внутри которого он написан. Внешний цикл после этого продолжает работу:

for (let row = 1; row <= 2; row++) {
  for (let col = 1; col <= 3; col++) {
    if (col === 2) {
      break;
    }
    console.log(`${row}-${col}`);
  }
}
// 1-1
// 2-1

Если нужно выйти сразу из всех циклов, удобнее вынести их в функцию и завершить её через return — об этом в главе о функциях.

Частая ошибка

В цикле while команда continue перескакивает и через изменение счётчика, если оно стоит ниже. Тогда счётчик перестаёт меняться, и цикл становится бесконечным:

let i = 0;
 
while (i < 5) {
  if (i === 2) {
    continue; // i++ ниже не выполнится — цикл зависнет
  }
  i++;
}

Меняйте счётчик до continue или используйте цикл for, где шаг выполняется всегда.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.