вопрос о цикле событий JavaScript - PullRequest
11 голосов
/ 25 июня 2011

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

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

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

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

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

0 голосов
/ 26 июля 2016

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

...