PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Как не сломать цикл while?

Основы языка

Цикл `while` не «сломать» (не зациклить) можно, гарантируя изменение условия внутри тела и его достижимость выхода, иначе бесконечный цикл заблокирует поток.

Как избежать бесконечного цикла

Изменять условие внутри тела

Условие должно прогрессировать к выходу:

let i = 0;
while (i < 5) {
  console.log(i);
  i++; // ОБЯЗАТЕЛЬНО менять — иначе бесконечный цикл
}

Забыть i++ → i всегда 0 → цикл никогда не завершится.

Гарантировать достижимость выхода

Условие должно стать ложным:

// Опасно — условие может никогда не выполниться
while (value !== target) {
  value = getNext(); // убедиться, что target достижим
}

break как страховка

Предохранитель на случай непредвиденного:

let attempts = 0;
while (condition) {
  if (++attempts > 1000) break; // защита от зацикливания
  // ...
}

Осторожно с float в условии

// Может не завершиться из-за неточности float
while (x !== 1.0) x += 0.1; // лучше x <= 1.0

Что происходит при зацикливании

Бесконечный цикл блокирует поток — UI замерзает, вкладка зависает (JS однопоточный).

Практика

  • Всегда менять переменную условия.
  • Проверять достижимость выхода.
  • Добавлять предохранитель (break по счётчику) при сложных условиях.
  • Избегать !== с float.

Коротко для собеседования

Чтобы не сломать (не зациклить) while: обязательно менять переменную условия внутри тела (i++), гарантировать достижимость выхода (условие станет ложным), добавлять предохранитель (break по счётчику попыток), избегать !== с float (неточность). Бесконечный цикл блокирует однопоточный JS — UI зависает.

Другие вопросы раздела