Чем замыкание отличается от обратного вызова? - PullRequest
21 голосов
/ 05 марта 2009

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

Ответы [ 9 ]

17 голосов
/ 05 марта 2009

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

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

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

9 голосов
/ 05 марта 2009

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

Обратный звонок -

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

Закрытие -

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

4 голосов
/ 05 февраля 2017

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

4 голосов
/ 05 марта 2009

Здесь есть хорошее определение замыканий здесь :

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

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

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

1 голос
/ 05 марта 2009

Обратный вызов, зависящий от переменной контекста, или связанных переменных (== состояние объекта), будет закрытием. В противном случае это будет чисто функция, когда она принимает только свободные переменные (== параметры).

0 голосов
/ 12 сентября 2018

Что такое функция обратного вызова?

Функция обратного вызова - это функция, которая:

  • передано в качестве аргумента другой функции
  • вызывается (लागू) после какого-то события
  • как только родительская функция завершается, функция, переданная в качестве аргумента, затем вызывается

на простом английском мы говорим Обратным вызовом является любая функция, которая вызывается другой функцией, которая принимает первую функцию в качестве параметра или функцию, переданную в качестве аргумента

  • Примечание: invoked : код внутри функции выполняется при ее вызове. или мы говорим так Обычно используется термин «вызов функции» вместо «вызов функции».

Также принято говорить «вызов функции», «запуск функции» или «выполнение функции».

 function getUserInput(firstName, lastName, age, callback2,callback1) {
    var fullName = firstName + " " + lastName;

    // Make sure the callback is a function
    if (typeof callback2 === "function") {
    // Execute the callback function and pass the parameters to it
    callback2(fullName, age);
    }
	
    if (typeof callback1 === "function") {     
    callback1(lastName);
    }
}

function callbackforlastname1(lname){
 console.log("---");
}
 
function genericPoemMaker(name, aged) {
    console.log(name + " is finer than fine wine.");
     console.log("A " + aged + " of unfortunl smile");
}

getUserInput("Avinash", "Maurya", "26", genericPoemMaker,callbackforlastname1); 
ऐसे कॉल करते है
0 голосов
/ 12 сентября 2018

закрытие:

  • Ключевое слово функции внутри другой функции, вы создаете замыкание

  • Или Возвращение функции к другой функции, которую мы можем назвать закрытием

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

var length = 101;
function fn2() {
	console.log("fffxxx: "+this.length);
}
 
var obj = {
  length: 5,
  method3: function(fn) {
    fn();
    arguments[0]();
  }
};
 
obj.method3(fn2, 1);
   
** Выход होगा
fffxxx:101
fffxxx:2**
0 голосов
/ 06 июня 2018

Вот способ провести различие между этими двумя:

Закрытие

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

Обратный вызов

Обратный вызов более или менее похож на замыкание, но он больше используется для информирования и обеспечения синхронных возможностей. Например, если вы выполняете вызовы jQuery Ajax, у вас будут обратные вызовы, такие как success(), error(), beforeSend() и т. Д. Для обработки асинхронных данных.

0 голосов
/ 05 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...