Question

J'ai posé une question sur les rappels et est arrivé à une autre question (voir commentaire). En quoi une fermeture est-elle différente d'un rappel?

Était-ce utile?

La solution

Vérifiez l'introduction en ceci: http://jibbering.com/faq/faq_notes/closures. html . Cela peut vous aider à mieux comprendre le lien entre les fermetures et les fonctions.

Voici un ensemble d’exemples de fermeture: http://www.javascriptkit.com/javatutors/ closures2.shtml

En gros, le rappel est comme un pointeur de fonction. Le bit qui en fait une fermeture, c'est quand cette fonction accède à n'importe quoi sur le contexte dans lequel elle vit, comme les variables en dehors de ça. Lorsque cela se produit, la fonction utilisera les valeurs actuelles des variables (au lieu de les copier). Voir exemple 4.

Autres conseils

Différentes définitions:

Rappel -

  

un rappel est un code exécutable transmis en tant qu'argument à un autre code.

Fermeture -

  

une fermeture est une fonction évaluée dans un environnement contenant une ou plusieurs variables liées. Lorsqu'elle est appelée, la fonction peut accéder à ces variables.

Il existe une bonne définition des fermetures ici :

  

Une "fermeture" est une expression   (typiquement une fonction) pouvant avoir   variables libres avec un   environnement qui lie ces variables   (qui "ferme" l'expression).

En pratique, cela signifie que c'est une fonction qui a des variables cachées.

Un rappel est une idée de niveau supérieur. Généralement, c'est une fonction qui est transmise avec l'intention d'être appelée ultérieurement. En JavaScript, les fermetures sont souvent utilisées comme rappels.

En termes simples: un rappel utilisant des variables de contexte est une fermeture.

Un rappel dépendant d'une variable de contexte appelée variable liée (== état d'objet) sera une fermeture. Ce sera une fonction pure, sinon, quand il ne prendra que des variables libres (== paramètres).

Voici un moyen de différencier ces deux éléments:

Fermeture

  

Une fermeture sert à étendre la fonctionnalité. Par exemple, si un utilisateur clique sur un bouton, nous voulons que quelque chose se passe à l'écran. Dans ce cas, nous utiliserions une fermeture à laquelle nous transmettons l'événement de l'utilisateur (un clic), puis pousser les données à la vue.

Rappel

  

Un rappel est plus ou moins similaire à une fermeture, mais il est plus utilisé pour informer et fournir des capacités synchrones. Par exemple, si vous effectuez des appels jQuery Ajax, vous aurez des rappels tels que success () , erreur () , beforeSend () , etc. en avant pour gérer les données asynchrones.

Qu'est-ce qu'une fonction de rappel?

Une fonction de rappel est une fonction qui est:

  • passé en argument à une autre fonction
  • est appelé (& # 2354; & # 2366; & # 2327; & # 2370;) après une sorte d’événement
  • une fois que sa fonction parent est terminée, la fonction passée en argument est ensuite appelée

en clair, on dit Un rappel est une fonction appelée par une autre fonction, qui prend la première fonction en tant que paramètre ou fonction transmise en tant qu'argument

  • Note: invoqué : le code à l'intérieur d'une fonction est exécuté lorsque la fonction est invoquée. ou on dit comme ça Il est courant d'utiliser le terme "appeler une fonction". au lieu de "invoquer une fonction".

Il est également courant de dire "appeler une fonction", "démarrer une fonction" ou "exécuter une fonction".

 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); 
& # 2320; & # 2360; & # 2375; & nbsp; & # 2325; & # 2377; & # 2354; & # 2325; & # 2352; & # 2340; & # 2375; & # 2361; & # 2376;

fermeture:

  • Un mot-clé de fonction dans une autre fonction, vous créez une fermeture

  • Ou Un retour de fonction à une autre fonction on peut dire fermeture

Note Plain English: Une petite différence de fonction transmise en tant qu'argument dans une autre fonction est un rappel ou si définir dans une autre fonction est une fermeture

var length = 101;
function fn2() {
	console.log("fffxxx: "+this.length);
}
 
var obj = {
  length: 5,
  method3: function(fn) {
    fn();
    arguments[0]();
  }
};
 
obj.method3(fn2, 1);
   
 ** Sortie & # 2361; & # 2379; & # 2327; & # 2366;

fffxxx:101
fffxxx:2**

Je ne vois pas comment les deux sont même liés? Une fermeture entraîne certaines fonctions d’un État local dans une fonction, qu’on considère comme passant par référence.

Un rappel a pour but de vous informer de certains changements et redirige le flux du programme. La fermeture pourrait modifier l’état local, mais vous n’auriez jamais besoin de temps processeur pour le gérer, comme vous le feriez avec un rappel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top