2012-03-27 6 views
15

La fonction de rappel, je travaille avec a la signature suivante (à partir http://api.jquery.com/load/):paramètres en fonction de Skipping rappel

complete(responseText, textStatus, XMLHttpRequest) 

Maintenant, je ne ai besoin le troisième paramètre. En Lua il y a une convention où un trait de soulignement est utilisé pour ignorer valeurs inutiles de retour des fonctions (sauter car _ tiendra effectivement la valeur):

var1, _, _, var4 = func() 

Je pensais faire une chose similaire avec JavaScript et tournerai ma signature de fonction à ceci:

function (_, _, XMLHttpRequest) 

y at-il quelque chose de mal avec cette approche, peut-être il y a un meilleur/plus propre chemin?

+0

Je pense que la meilleure solution est fournie dans [Skipping paramètres de la fonction en option JavaScript] [1] [1]: http://stackoverflow.com/questions/ 8356227/skipping-optional-function-parameters-in-javascript/8356945 – Mohsenme

+1

@Mohsenme C'est une question différente, il s'agit de passer des paramètres aux fonctions. Celui-ci consiste à définir une fonction de rappel. – Stijn

Répondre

11

La technique n'est pas jolie, mais je l'utilise moi-même à plusieurs reprises. Je suppose qu'il est toujours préférable de donner des noms significatifs à ces arguments inutilisés (juste pour éviter la confusion), mais vous pouvez utiliser des caractères de soulignement.

Je vois souvent utilisé dans les callbacks liés jQuery, où le index est souvent transmis comme premier argument, comme

$('.foo').each(function(_, node) { 
}); 

parce que la plupart du temps, vous ne se soucient pas de l'indice là-bas. Donc, pour répondre à votre vraie question, il n'y a rien de mal à utiliser la technique (à côté de la confusion peut-être) et il n'y a pas de meilleure façon d'ignorer les arguments indésirables.

+3

Oui, j'éviterais d'utiliser des underscores si vous prévoyez d'utiliser underscore.js ou lodash. Je me suis un peu énervé par moi-même, donc mieux vaut utiliser d'autres espaces réservés. – Dave

1

Vous utilisez deux arguments qui ont le même nom. Vous devriez écrire ceci:

function (_, __, myXhr) 
+0

Je n'utilise pas les valeurs de ces paramètres, donc même si l'un sera écrasé par l'autre, peu importe s'ils ont le même nom. – Stijn

+3

ok, donc vous utilisez la bonne méthode! Le caractère _ est souvent utilisé pour sauter des paramètres ou pour créer des fonctions partielles dans plusieurs langues. –