J'essaie de passer un paramètre à une fonction utilisée comme rappel, comment faire?
function tryMe (param1, param2) {
alert (param1 + " and " + param2);
}
function callbackTester (callback, param1, param2) {
callback (param1, param2);
}
callbackTester (tryMe, "hello", "goodbye");
Réponses:
Si vous voulez quelque chose d'un peu plus général, vous pouvez utiliser la variable arguments comme ceci:
Mais sinon, votre exemple fonctionne bien (les arguments [0] peuvent être utilisés à la place du rappel dans le testeur)
la source
callback.apply(arguments)
le corps de la fonctioncallbackTester
est extensible au-delà du scénario à deux arguments.Cela fonctionnerait également:
Un autre scénario:
la source
if (typeof window[callback] == 'function') window[callback].call(this);
Votre question n'est pas claire. Si vous demandez comment vous pouvez le faire d'une manière plus simple, vous devriez jeter un œil à la méthode ECMAScript 5e édition .bind () , qui est membre de Function.prototype . En l'utilisant, vous pouvez faire quelque chose comme ceci:
Vous pouvez également utiliser le code suivant, qui ajoute la méthode si elle n'est pas disponible dans le navigateur actuel:
Exemple
bind () - Documentation PrototypeJS
la source
Array.prototype.slice.call(arguments)
etarguments.slice()
?f = function(arg1,arg2){alert(arg1+arg2);}.bind(this,"abc");
f("def") // Gives "abcdef"
Lorsque vous avez un rappel qui sera appelé par quelque chose d'autre que votre code avec un nombre spécifique de paramètres et que vous souhaitez passer des paramètres supplémentaires, vous pouvez passer une fonction wrapper comme rappel et à l'intérieur du wrapper passer le ou les paramètres supplémentaires.
la source
Si vous n'êtes pas sûr du nombre de paramètres que vous allez passer dans les fonctions de rappel, utilisez
apply
function.la source
Enveloppez la (les) fonction (s) 'enfant (s) en cours de passage sous / avec des arguments dans les wrappers de fonction pour éviter qu'elles ne soient évaluées lorsque la fonction' parent 'est appelée.
la source
Code d'une question avec un nombre quelconque de paramètres et un contexte de rappel:
la source
Utilisez la fonction curry comme dans cet exemple simple.
la source
Une nouvelle version pour le scénario où le rappel sera appelé par une autre fonction, pas votre propre code, et vous souhaitez ajouter des paramètres supplémentaires.
Par exemple, supposons que vous ayez beaucoup d'appels imbriqués avec succès et rappels d'erreur. J'utiliserai des promesses angulaires pour cet exemple mais tout code javascript avec des rappels serait le même à cet effet.
Vous pouvez maintenant désencombrer votre code en définissant une fonction pour consigner les erreurs, en conservant l'origine de l'erreur à des fins de débogage. Voici comment procéder pour refactoriser votre code:
La fonction appelante ajoutera toujours le paramètre d'erreur après les paramètres de votre fonction de rappel.
la source
Je cherchais la même chose et me retrouvais avec la solution et ici c'est un exemple simple si quelqu'un veut passer par là.
Également affiché sur l'autre question ici
la source
Permettez-moi de vous donner un exemple très simple de style Node.js d'utilisation d'un rappel:
et le HTML qui rendra le résultat:
Vous pouvez jouer avec ici: https://jsfiddle.net/q8gnvcts/ - par exemple, essayez de passer une chaîne au lieu d'un nombre: myTest ('some string', 6, function (err, result) .. et voyez le résultat.
J'espère que cet exemple aide car il représente l'idée très basique des fonctions de rappel.
la source
en savoir plus sur la syntaxe de propagation
la source
la source