Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   вложение вызова функции (https://javascript.ru/forum/events/60222-vlozhenie-vyzova-funkcii.html)

fimont 17.12.2015 19:51

вложение вызова функции
 
Здравствуйте, уважаемые форумчане!

Подскажите, пожалуйста, где можно почитать о вложении вызовов функции?
Проблема такая: есть обработчик события mousemove, в котором вызывается некая функция draw. Эта функция неспешная, и следующий вызов вполне может произойти до окончания ее работы от предыдущего события.
Будет ли происходить вложение вызовов или обработчик события не может прерывать сам себя, и запросы на обработку события будут образовывать очередь?
Что происходит в таком случае, как этот работает этот механизм?

nestedFunctions 17.12.2015 21:24

fimont,
В случае, который вы описываете, если я правильно понял, ф-ция draw является асинхронной, никакого "вложения вызовов" не будет
Цитата:

Сообщение от fimont
или обработчик события не может прерывать сам себя

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

Сообщение от fimont
запросы на обработку события будут образовывать очередь?

нет
Цитата:

Сообщение от fimont
как этот работает этот механизм?

на событие onmousemove интерпретатор вызывает обработчик, который в свою очередь вызывает draw, которая, в свою очередь кидает свой коллбек в очередь событий. Оба вложенных вызова возвращают undefined, если не прописано иное.

fimont 18.12.2015 10:50

nestedFunctions, спасибо за быстрый ответ!
Если позволите, пара уточнений:
draw() - это обычный вызов функции, вполне себе синхронный. И, таким образом, до окончания выполнения этой функции обработчик события (mousemove) свою работу не заканчивает, а остальные обработчики событий, если таковые происходят, просто ставятся в очередь и ожидают. Я правильно понял?
И еще - обработчики событий отложенного запуска функций setInterval тоже стоят в этой очереди на обработку?

Еще раз, спасибо!

goodbigbeer 18.12.2015 18:13

Цитата:

Сообщение от fimont
draw() - это обычный вызов функции, вполне себе синхронный

сам по себе вызов всегда синхронен, асинхронен код, который бросается из этой функции.
Цитата:

Сообщение от fimont
до окончания выполнения этой функции обработчик события (mousemove) свою работу не заканчивает

Да, но асинхронный код живет своей жизнью, он не зависит от этих взовов
Цитата:

Сообщение от fimont
а остальные обработчики событий, если таковые происходят, просто ставятся в очередь и ожидают. Я правильно понял?

Да, если их несколько на этот момент
Цитата:

Сообщение от fimont
обработчики событий отложенного запуска функций setInterval тоже стоят в этой очереди на обработку?

Да

fimont 19.12.2015 11:43

всем БОЛЬШОЕ спасибо! :thanks:
все стало гораздо яснее...


Часовой пояс GMT +3, время: 15:04.