Passez la fonction comme un paramètre dans une autre fonction. Cette fonction est appelée une fonction de rappel
Il est souvent rencontré dans cette situation que les couches A et B d'un projet sont achevées par différents membres du personnel en collaboration. La couche A est responsable de la fonction FONA, et la couche B est responsable de Funcb. Lorsque B Layer veut utiliser les données d'un certain module, il a dit au personnel de la couche A que j'ai besoin de vous pour fournir des données qui répondent à certains besoins et que vous me fournissez une interface.
Le personnel du niveau A a déclaré: Je vais vous fournir des données et comment l'afficher et le traiter est Business de B.
Bien sûr, la couche B ne peut pas fournir une interface de données pour chaque exigence. B fournit une interface à passer. B obtient les données, puis B écrit la fonction pour l'afficher.
Autrement dit, vous devez travailler avec d'autres et d'autres fournissent des données, et vous n'avez pas besoin de vous concentrer sur la façon dont les autres obtiennent ou créent des données. Vous avez juste besoin de fonctionner sur les données que vous obtenez. Vous devez utiliser une fonction de rappel pour le moment
Par conséquent, les rappels sont essentiellement un modèle de conception, et les principes de conception de jQuery (y compris d'autres cadres) suivent ce modèle.
Un exemple d'utilisation des rappels en synchronisation (blocage) consiste à exécuter FUNC2 après l'exécution du code FUNC1.
La copie de code est la suivante:
var func1 = fonction (rappel) {
// faire quelque chose.
(callback && typeof (callback) === "fonction") && callback ();
}
func1 (func2);
var func2 = fonction () {
}
Exemple de rappels asynchrones:
La copie de code est la suivante:
$ (document) .ready (rappel);
$ .ajax ({
URL: "test.html",
contexte: document.body
}). Done (function () {
$ (this) .addclass ("fait");
}). fail (function () {
alert ("erreur");
}). toujours (fonction () {
alert ("complet");
});
Notez que la demande Ajax est en effet asynchrone, mais cette demande est demandée par le navigateur. Lorsque l'état de la demande est modifié, si un rappel a été défini auparavant, le thread asynchrone générera un événement de changement d'état et le mettra dans la file d'attente de traitement du moteur JavaScript pour attendre le traitement. Voir: http://www.phpv.net/html/1700.html
Quand le rappel sera-t-il exécuté
Les fonctions de rappel sont généralement exécutées dernier dans une situation synchrone, mais peuvent ne pas être exécutées dans une situation asynchrone car l'événement n'est pas déclenché ou les conditions ne sont pas remplies.
Les cas d'utilisation des fonctions de rappel
Chargement des ressources: exécutez un rappel après le chargement dynamique des fichiers JS, exécutez un rappel après le chargement de l'IFRAME, exécutez un rappel après le chargement de l'opération Ajax, exécutez un rappel après le chargement de l'image, AJAX, etc.
Les événements DOM et les événements Node.js sont basés sur le mécanisme de rappel (les rappels Node.js peuvent avoir des problèmes de nidification de rappel multi-couches).
Le temps de retard de Settimeout est 0. Ce hack est souvent utilisé. La fonction appelée par setTimeout est en fait un mode de réalisation
Appel de chaîne: lorsque l'appel de la chaîne, il est facile d'implémenter l'appel de chaîne dans la méthode de l'évaluateur (secteur) (ou dans les méthodes qui ne renvoient pas de valeurs), mais le Getter de valeur est relativement difficile à implémenter l'appel de chaîne, car vous avez besoin que le Getter de valeur renvoie les données dont vous avez besoin au lieu de ce pointeur. Si vous souhaitez implémenter la méthode de la chaîne, vous pouvez utiliser une fonction de rappel pour l'implémenter.
Les appels de fonction de setTimeout et setInterval obtiennent leur valeur de retour. Étant donné que les deux fonctions sont asynchrones, c'est-à-dire que leur synchronisation d'appels et le processus principal du programme sont relativement indépendants, il n'y a aucun moyen d'attendre leur valeur de retour dans le corps, et que le programme ne s'arrêtera pas et n'attendra pas lorsqu'ils seront ouverts, sinon la signification de Settimeout et SetInterval sera perdu. Par conséquent, il n'a pas de sens d'utiliser le retour, donc le rappel ne peut être utilisé que. La signification du rappel est de notifier la fonction proxy des résultats d'exécution du temporisateur pour un traitement en temps opportun.
Je devrais avoir des informations collectées en ligne et je devrais les comprendre. Je vais trier un exemple par moi-même:
La copie de code est la suivante:
fonction Fun (num, rappel) {
if (num <0) {
alert ("Appelez la fonction de niveau A à gérer!");
alert ("Les données ne peuvent pas être négatives, erreur d'entrée!");
} else if (num == 0) {
alert ("Appelez la fonction de niveau A à gérer!");
alert ("Cet élément de données n'existe pas!");
}autre{
alert ("Appelez la fonction de niveau B pour traiter!");
rappel (1);
}
}
fonction test () {
var num = document.getElementById ("score"). valeur;
Fun (num, fonction (dos) {// fonction de traitement de la couche B anonyme
alert (":" + back);
si (num <2)
alerte ("le nombre est 1");
else if (num <= 3)
alert ("Le nombre est 2 ou 3!");
autre
alerte ("nombre supérieur à 3!");
})
}
Lorsque la fonction commence à s'exécuter, allez d'abord pour déterminer si NUM est un nombre négatif ou un zéro, sinon exécuter l'alerte de fonction de traitement de la couche B (":" + arrière); Sortie 1, et déterminez-le comme <2, <= 3,> 3, etc.
Conseils d'expérience:
Il est préférable de s'assurer que le rappel existe et doit être une référence de fonction ou une expression de fonction:
La copie de code est la suivante:
(callback && typeof (callback) === "fonction") && callback ();
La copie de code est la suivante:
var obj = {
init: function (rappel) {
//FAIRE ...
if (callback && typeof (callback) === "function") && callback ()) {
rappel ('init ...'); // rappel
}
}
Enfin, pourquoi vous devez utiliser une fonction de rappel? La métaphore suivante est très vive et intéressante.
Si vous avez quelque chose à faire, accédez au prochain dortoir pour trouver un camarade de classe et découvrez que la personne n'est pas là, que devez-vous faire?
Méthode 1: Passez au dortoir suivant toutes les quelques minutes pour voir si la personne est là
Méthode 2: Veuillez appeler quelqu'un dans le même dortoir avec lui et vous appeler quand vous le voyez revenir
Le premier est sondé et le second est un rappel.
Ensuite, vous dites, puis-je attendre directement dans le dortoir d'à côté jusqu'à ce que mes camarades de classe reviennent?
Oui, mais de cette façon, vous auriez pu gagner du temps pour faire d'autres choses, mais maintenant vous devez le gaspiller en attendant. Transformez l'appel asynchrone non bloquant d'origine un appel synchrone bloquant.
Les rappels JavaScript sont utilisés dans les scénarios d'appel asynchrones, et les performances de l'utilisation de rappels sont meilleures que le sondage.