Проверяет понимание однопоточной модели JavaScript и того, как синхронный код блокирует основной поток выполнения.
JavaScript является однопоточным языком, что означает, что весь код выполняется последовательно в одном потоке — главном потоке (main thread). Этот поток отвечает не только за выполнение JavaScript, но и за обработку пользовательских событий (клики, нажатия клавиш), рендеринг DOM и выполнение анимаций. Если какой-либо синхронный код выполняется слишком долго или бесконечно, он блокирует этот поток.
Рассмотрим простой пример:
while (true) {
// бесконечный цикл
console.log('Бесконечность');
}Когда этот код выполняется, цикл никогда не завершится. Браузер не сможет обработать очередь событий (event queue), так как цикл постоянно занимает стек вызовов. Пользователь не сможет нажать на кнопку, ввести текст или даже закрыть вкладку обычным способом — страница зависнет.
Для длительных операций следует использовать асинхронные подходы:
Пример с setTimeout, который не блокирует поток:
function loopWithDelay() {
console.log('Итерация');
setTimeout(loopWithDelay, 0); // планирует следующий вызов
}
loopWithDelay();Здесь каждый вызов функции завершается, и браузер может обработать события до следующей итерации.
Бесконечный цикл блокирует взаимодействие пользователя со страницей, так как занимает единственный поток выполнения. Для предотвращения зависаний используйте асинхронные механизмы или Web Workers для тяжелых вычислений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию