Obtenir une meilleure compréhension des fonctions de rappel en JavaScript
Je comprends le passage d'une fonction à une autre fonction comme une fonction de rappel et l'avoir à l'exécuter, mais je ne suis pas la compréhension de la meilleure mise en œuvre pour le faire. Je suis à la recherche d'un exemple de base, comme ceci:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
//Do something with param1 and param2.
if ( arguments.length == 3 ) {
//Execute callback function.
//What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
//When this anonymous function is called, execute it.
});
}
};
Dans myFirstFunction, si je dois retourner nouveau callback(), puis il travaille et exécute la fonction anonyme, mais qui ne semble pas être la bonne approche pour moi.
- Correct dans ce sens? Généralement, les rappels sont utilisés pour les gestionnaires d'événements, pour la plupart, notamment les appels Ajax, qui sont asynchrones--au fond des choses, où on ne sait pas quand (ou si) un resposne viendra.
- par la façon dont les arguments sont de tableau mais pas de tableau , de sorte que vous ne pouvez pas faire de l'argument.longueur, mais vous pouvez le convertir dans un tableau à l'aide de la tranche de la méthode...
- bien que vous avez raison,
arguments
n'est pas un tableau, vous pouvez toujours référence à sa longueur quearguments.length
-- lui donner un essai. Cette propriété renvoie le nombre d'arguments passés, et pas nécessairement le nombre de paramètres dans la signature de la fonction.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez juste dire
Alternativement, vous pouvez utiliser le
call
méthode si vous souhaitez ajuster la valeur dethis
dans la fonction de rappel.L'intérieur de la fonction
this
serait ce quenewValueForThis
est.Vous devriez vérifier si la fonction de rappel existe et est un fichier exécutable fonction:
Beaucoup de librairies (jQuery, dojo, etc.) l'utilisation d'un modèle similaire pour leur asynchrone fonctions, ainsi que node.js pour tous les async fonctions (nodejs passe habituellement
error
etdata
pour le rappel). En regardant dans le code source permettrait de!callback
à la chaîne, puis vérifier son type? Sera-ce d'améliorer les performances? C'est comme la vérification de type, de vérifier si le converti en booléen renvoie true, puis vérifier à nouveau son type et de le tester à l'encontre de la chaîne... Pourriez-vous expliquer pourquoi?typeof(callback)
atteindre pour vous?typeof(null) === "Object"
,typeof("undefined") === "undefined"
callback
comme argument, et il est incertain que l'argument est d'un callable de type ou peut-être les arguments sont de types différents dans une tentative de fournir une forme de polymorphisme où ce code peut réagir différemment à différentstypeof
arguments.Il y a 3 possibilités pour exécuter une fonction:
La méthode que vous choisissez dépend si:
Docs pour Fonction.appel,
Fonction.appliquer
Rappels sont sur les signaux et les "nouvelles" sur la création d'instances de l'objet.
Dans ce cas, il serait même plus approprié pour exécuter "callback();" que "de retour de nouveau callback()" parce que vous ne faites pas n'importe quoi avec une valeur de retour, de toute façon.
(Et les arguments.longueur==3 test est vraiment maladroit, fwiw, préférable de vérifier que le rappel param existe et est une fonction.)
la mise en œuvre correcte serait:
cela rend le rappel paramètre facultatif..
Vous pouvez utiliser:
L'exemple ci-dessous est un peu plus complet:
JS:
Voici un exemple de base qui explique la
callback()
fonction en JavaScript:JS:
JSFiddle
JS: