Причина, по которой он однопоточный, заключается именно в том, почему ему нужно использовать асинхронный код.Есть определенные вещи, которые можно выполнить «в фоновом режиме»;например, делая сетевой запрос через XMLHttpRequest
, фактический запрос будет обрабатываться механизмом в фоновом режиме, а не обрабатывать один поток Javascript.Код, ожидающий завершения запроса, не нуждается в блокировке потока, он может уступать другим функциям и вызываться асинхронно после получения ответа.
Нет способа написать "фоновые »вещи в чистом Javascript;создание фактического сетевого запроса слишком низкоуровнево для обработки Javascript, фактическая реализация находится где-то в C, или что бы двигатель не использовал.Есть только несколько таких вещей, которые «работают в фоновом режиме», например setTimeout
, setInterval
и т. Д.