Параллельная модель и цикл событий
JavaScript однопоточный и весь код выполняется в main thread, т.е. в одну единицу времени может быть сделано что-то одно. Вдобавок, отрисовка страницы в браузере происходит в том же потоке.
Однако, в нашем распоряжении есть асинхронные "штуки", например такие как AJAX запросы, setTimeout/setInterval и addEventListener. Но результат их работы всё равно обрабатывается в main thread.