Je comprends le passage d'une fonction à une autre fonction en tant que rappel et son exécution, mais je ne comprends pas la meilleure implémentation pour le faire. Je recherche un exemple très basique, comme celui-ci:
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 retourne new callback (), cela fonctionne et exécute la fonction anonyme, mais cela ne me semble pas être la bonne approche.
arguments
n'est pas un tableau, vous pouvez toujours référencer sa longueur commearguments.length
- essayez-le. Cette propriété fait référence au nombre d'arguments réellement passés et pas nécessairement au nombre de paramètres dans la signature de la fonction.Réponses:
Tu peux juste dire
Vous pouvez également utiliser la
call
méthode si vous souhaitez ajuster la valeur dethis
dans le rappel.À l'intérieur de la fonction se
this
trouverait ce quinewValueForThis
est.la source
Vous devez vérifier si le rappel existe et est une fonction exécutable:
Beaucoup de bibliothèques (jQuery, Dojo, etc.) utilisent un modèle similaire pour leurs fonctions asynchrones, ainsi que Node.js pour toutes les fonctions asynchrones (NodeJS passe habituellement
error
etdata
au rappel). Examiner leur code source aiderait!la source
callback
chaîne puis vérifiez son type? Cela améliorera-t-il les performances? C'est comme vérifier le type, vérifier si le booléen converti renvoie true, puis vérifier à nouveau son type et le tester par rapport à la chaîne ... Pouvez-vous expliquer pourquoi?typeof(callback)
pour vous?typeof(null) === "Object"
,typeof("undefined") === "undefined"
callback
n'est pas converti en chaîne, son type est vérifié pour voir s'il s'agit d'une fonction, avant qu'elle ne soit appelée. Le code accepte vraisemblablementcallback
comme argument, et n'est pas certain que l'argument soit d'un type appelable - ou peut-être que les arguments sont de différents types dans une tentative de fournir une forme de polymorphisme où le code pourrait réagir différemment à différentstypeof
arguments.Il existe 3 possibilités principales pour exécuter une fonction:
La méthode que vous choisissez dépend si:
Docs pour Function.call , Function.apply
la source
Les rappels concernent les signaux et «nouveau» concerne la création d'instances d'objets.
Dans ce cas, il serait encore plus approprié d'exécuter simplement "callback ();" que "return new callback ()" car vous ne faites rien avec une valeur de retour de toute façon.
(Et le test arguments.length == 3 est vraiment maladroit, fwiw, mieux vaut vérifier que le paramètre de rappel existe et est une fonction.)
la source
la mise en œuvre appropriée serait:
cela rend le paramètre de rappel facultatif.
la source
Vous pouvez utiliser:
L'exemple ci-dessous est un peu plus complet:
la source
Voici un exemple de base qui explique la
callback()
fonction en JavaScript:JSFiddle
la source
la source