Подтвердить что ты не робот

Как закрытие отличается от обратного вызова?

Я спросил вопрос о обратных вызовах и пришел к другому вопросу (см. комментарий). Как закрытие отличается от обратного вызова?

4b9b3361

Ответ 1

Проверьте введение в этом: http://jibbering.com/faq/faq_notes/closures.html. Это может помочь вам лучше понять, как замыкания связаны с функциями.

Вот пример примеров закрытия: http://www.javascriptkit.com/javatutors/closures2.shtml

В принципе, обратный вызов похож на указатель функции. Бит, который делает его закрытием, - это когда эта функция обращается к чему-либо в контексте, где он живет, например, вне переменных. Когда это произойдет, функция будет использовать текущие значения переменных (в отличие от их копирования). См. Пример 4.

Ответ 2

Различные определения:

Callback -

обратный вызов является исполняемым кодом, который передается как аргумент другому коду.

Closure -

замыкание - это функция, которая вычисляется в среде, содержащей одну или несколько связанных переменных. При вызове функция может обращаться к этим переменным.

Ответ 3

Хорошее определение закрытия здесь:

"Закрытие" - это выражение (обычно это функция), которая может иметь свободных переменных вместе с среда, которая связывает эти переменные (что "закрывает" выражение).

На практике это означает, что это функция, которая имеет некоторые скрытые переменные.

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

Ответ 4

Простыми словами: обратный вызов с использованием переменных контекста является закрытием.

Ответ 5

Обратный вызов в зависимости от переменной контекста aka bound variables (== object state) будет закрытием. Это будет чистая функция, иначе, когда она принимает только свободные переменные (== параметры).

Ответ 6

Я не вижу, как они связаны друг с другом? Закрытие переносит части локального состояния в какую-то функцию, считая его передачей по ссылке.

Обратный вызов предназначен для уведомления о некоторых изменениях и перенаправляет поток программы. Закрытие может изменять локальное состояние, но вы никогда не получите процессорное время для обработки, как если бы вы обратились к обратному вызову.