Закрытия уже хорошо обработаны в Stackoverflow, вот только выбор: -
Как работает закрытие JavaScript?
Что именно означает «замыкание» в JavaScript?
Можете ли вы сказать, что это правильный пример закрытия Javascript .. Где места, которые мы должны рассмотреть, чтобы избежать закрытия ??
Объем и закрытие JavaScript
Javascript Closures и "этот" контекст
JavaScript - Как узнать об использовании «замыканий»?
Обратные вызовы - более простая концепция. Обратный вызов в основном, когда функция принимает другую функцию в качестве параметра. В какой-то момент во время выполнения вызываемая функция выполнит функцию, переданную в качестве параметра, это callback . Довольно часто обратный вызов фактически происходит как асинхронное событие, и в этом случае вызываемая функция может вернуться без выполнения обратного вызова, что может произойти позже. Вот общий пример (на основе браузера): -
function fn() { alert("Hello, World"); }
window.setTimeout(fn, 5000);
Здесь функция fn
передается как callback в функцию setTimeout
. Заданное время ожидания возвращается немедленно, однако через 5 секунд выполняется функция, переданная как callback .
Закрытия и обратные вызовы
Довольно часто причиной создания замыканий (случайно, случайно или преднамеренно) является необходимость создания обратного вызова. Например: -
function AlertThisLater(message, timeout)
{
function fn() { alert(message); }
window.setTimeout(fn, timeout);
}
AlertThisLater("Hello, World!", 5000);
(Пожалуйста, прочитайте некоторые из связанных сообщений, чтобы понять закрытия)
Создается замыкание, содержащее частично параметр message
, fn
выполняется через некоторое время после возврата вызова AlertThisLater
, но fn
по-прежнему имеет доступ к исходному содержимому message
.