JavaScript в браузере однопоточный или многопоточный

«JavaScript в браузере однопоточный или многопоточный» — вопрос из категории Асинхронность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JavaScript в браузере однопоточный — он выполняется в одном основном потоке (main thread), который также отвечает за отрисовку UI. Однако, есть механизмы асинхронности (Event Loop, Web Workers), которые позволяют имитировать параллельные вычисления.

Пример асинхронности:

console.log('Start');
setTimeout(() => console.log('Timeout'), 0);
Promise.resolve().then(() => console.log('Promise'));
console.log('End');
// Вывод: Start, End, Promise, Timeout

Web Workers — единственный способ выполнять код в отдельном потоке, но они не имеют доступа к DOM и взаимодействуют с основным потоком через сообщения.