Javascript event-loop question

Интересно, как цикл событий работает в javascript, Я использую node.js, но я думаю, что тот же вопрос относится к браузерам.

У меня есть асинхронный вызов (скажем setTimeout или $.ajax или fs.readFile) и через некоторое время цикл события выполняет callback

теперь, когда выполняется callback, что происходит за сценой? Восстанавливает ли он стек, который он использовал при вызове асинхронных файлов?

На практике, каков контекст/это, в котором работает обратный вызов? и как это работает?

изменить: спасибо, я вижу.. просто еще одна проблема, как цикл событий "запоминает" область обратного вызова?

Ответ 1

JavaScript использует функцию scoping, правила обзора одинаковы во всех средах JS. Как отметил Никан, понимание закрытия важно знать, что доступно в вашем текущем объеме.

В основном функция "запоминает" среду, в которой она была определена. Поэтому, если вы используете встроенную анонимную функцию для вашего обратного вызова, у нее будет доступ ко всем переменным, доступным для его родительской функции, и ко всему, что передается в нее в качестве аргумента.

Несколько ресурсов относительно закрытия и области видимости в JavaScript:

Книга Стояна Стефанова Объектно-ориентированный JavaScript отлично справляется с пояснением области использования JavaScript и того, как работает лексическая область работы функций (см. главу 4). Я бы рекомендовал книгу всем, кто серьезно относится к программированию JS.

Ответ 2

Есть хороший инструмент под названием Javascript Loupe, созданный Филиппом Робертсом, который поможет вам понять, как стек вызовов/события JavaScript и цикл/обратный вызов взаимодействуют друг с другом. Запишите часть кода javascript в редакторе и попробуйте запустить его.