Как заблокировать выполнение кода?
Продвинутые темы
Выполнение кода блокируют тяжёлой синхронной операцией, но это антипаттерн. «Блокировать» намеренно можно циклом, синхронными API (`alert`), а правильно «приостановить» — через асинхронное ожидание.
Как блокируется поток
Тяжёлый синхронный цикл
const end = Date.now() + 3000;
while (Date.now() < end) {} // блокирует поток на 3 секунды (UI замирает)Синхронные блокирующие API
alert(),prompt(),confirm()— блокируют до ответа пользователя.- Синхронный
XMLHttpRequest(устарел). fs.readFileSync(Node).
Почему это плохо
JS однопоточный — блокировка замораживает UI: нет реакции на клики, анимации, рендер. Это антипаттерн.
Правильные альтернативы «паузе»
Асинхронная задержка (не блокирует)
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
await sleep(1000); // "пауза" без блокировки потокаПоток свободен во время ожидания.
Разбить работу
Тяжёлую задачу — на части через setTimeout/очередь.
Web Workers
Тяжёлые вычисления — в отдельный поток, не блокируя основной.
Когда «блокировка» оправдана
Почти никогда в UI. Синхронные операции уместны только для быстрых вычислений.
Коротко для собеседования
Синхронно заблокировать поток можно тяжёлым циклом или блокирующими API (alert, синхронный XHR), но это антипаттерн — UI замерзает (JS однопоточный). Вместо блокировки для «паузы» используют асинхронное ожидание (await sleep(ms) через setTimeout), разбиение работы или Web Workers.