В Javascript функция обратного вызова всегда закрыта? Обратное не верно, как вы видите ниже [?]:Является ли функция обратного вызова всегда закрытием?
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
};
var myFunc = makeFunc();
myFunc();
Где myfunc
это замыкание, а не обратный вызов.
Закрытие - это функции, которые наследуют переменные из окружающей среды. Когда вы передаете обратный вызов функции в качестве аргумента другой функции, которая будет выполнять операции ввода-вывода, эта функция обратного вызова будет вызываться позже, и эта функция почти волшебным образом запомнит контекст, в котором он был объявлен , а также все переменные, доступные в этом контексте, и любые родительские контексты. Эта мощная функция находится в основе успеха Узла.
С другой link:
Кроме того, поскольку обратные вызовы ведут себя так, как будто они на самом деле находится внутри , которые функционируют, они на практике закрытия: они могут получить доступ к , содержащие переменные и параметры функций, и даже переменные из глобального объема.
Когда мы передаем функцию обратного вызова в качестве аргумента другой функции обратного вызова выполняются в некоторой точке внутри тела объемлющей функции так же, как если обратный вызов был определенной в содержащей функцию. Это означает, что обратный вызов является закрытием . Прочитайте мой пост, Понимайте зашиты JavaScript с легкостью для подробнее о закрытии. Как известно, у закрытий есть доступ к области содержимого , поэтому функция обратного вызова может обращаться к содержащимся в ней функциям переменных и даже к переменным из глобальной области.
'printLocation' не является закрытием в вашем примере. – Quentin
Боюсь, неясно, о чем вы спрашиваете. – Louy
Что вы думаете о закрытии? Вы спрашиваете: «При передаче литерала функции в функцию в качестве аргумента эта функция передается по ее несвободным переменным?» Это один из многих способов, которыми я мог бы проанализировать ваш вопрос. – apsillers