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