Хотя каждый JavaScript агент имеет один исполняющий поток - так называемое «событие l oop» - время выполнения не ограничено числом потоков выполнения, которые он может использовать для обслуживания этого.
Обратные вызовы, передаваемые таким функциям, как setInterval
, setTimeout
или requestAnimationFrame
, запланированы для запуска "magi c "(ie. Скрытые логи c) в среде выполнения JavaScript.
Этот скрытый логи c планирует вставку обратных вызовов в очереди заданий в соответствующее время (например, после истечения интервала). Когда задание, связанное с обратным вызовом, достигает передней части соответствующей очереди заданий и когда выполняющий поток доступен для обслуживания, задание удаляется из очереди, кадр стека (он же контекст выполнения ) для него создается экземпляр, помещается в стек вызовов и начинается выполнение.
Лог c для асинхронных функций, таких как setTimeout
, setInterval
и requestAnimationFrame
, определены в других спецификациях (например, W3C / WHATWG ) и реализуется хост-приложениями (например, веб-браузером или экземпляром NodeJS). Эти функции не определены в спецификации ECMAScript.
Асинхронное поведение обещания , с другой стороны, указано в спецификации ECMAScript.