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

StackOverflow https://stackoverflow.com/questions/615907

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

  

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

Закрытие -

  

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

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

  

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

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

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

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

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

Вот способ отличить эти два понятия:

Закрытие

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

Перезвонить

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

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

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

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

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

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

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

 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); 
ऐसे कॉल करते है

закрытие:

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

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

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

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**

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top