Ответ 1
Ниже крышек javascript имеет очередь событий. Каждый раз, когда заканчивается поток выполнения javascript, он проверяет, есть ли в очереди очередное событие. Если есть, он вытаскивает его из очереди и запускает это событие (например, щелчок мыши).
Собственная сеть кода, которая находится под вызовом ajax, будет знать, когда будет выполнен ответ ajax, и событие будет добавлено в очередь событий javascript. Как знает собственный код, когда выполняется вызов ajax, зависит от реализации. Он может быть реализован с помощью потоков, или он может также управляться событиями (это не имеет большого значения). Суть реализации заключается в том, что когда выполняется ajax-ответ, некоторый собственный код будет знать это и помещает событие в очередь JS.
Если в данный момент Javascript не запущен, произойдет немедленное срабатывание события, которое будет запускать обработчик ответа ajax. Если что-то работает в то время, событие будет обработано, когда текущий поток выполнения javascript завершается. Механизм javascript не требует никакого опроса. Когда часть Javascript завершается, JS-движок просто проверяет очередь событий, чтобы увидеть, есть ли что-нибудь еще, что нужно запустить. Если это так, оно выдает следующее событие из очереди и выполняет его (вызывая одну или несколько функций обратного вызова, зарегистрированных для этого события). Если в очереди событий ничего нет, тогда у интерпретатора JS есть свободное время (сбор мусора или простаивание), пока какой-либо внешний агент не помещает что-то еще в очередь событий и не просыпает его снова.
Поскольку все внешние события проходят через очередь событий, и никакое событие никогда не запускается, а javascript фактически запускает что-то еще, он остается однопоточным.
Вот несколько статей о деталях:
- Как работает Javascript Timers - написанный Джоном Ресигом
- События и сроки в глубине
- Спецификация W3: контуры событий HTML5
- Статья MDN в цикле событий
- Презентация в очереди событий JS
- Цикл событий JavaScript: объяснено
- Пять шаблонов для поддержки асинхронного Javascript.
- Javascript Event Loop Presentation
- Обсуждение видео Как работает Javascript (включая цикл событий в 10:27)