Как не сломать цикл 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 зависает.