Comment passer les paramètres lors de l'appel d'une fonction sans parenthèse

J'ai une fonction appelée "tryMe" et je l'appelle sans parenthèse, pas précisément, mais l'idée est comme ce que vous feriez ici:

setTimeout(tryMe,200); 

Comment puis-je passer les paramètres dont j'ai besoin?

J'utilise un plugin jquery qui me permet d'appeler une fonction, mais je dois l'appeler avec les parenthèses ou il s'exécute lors du chargement.

 setTimeout(function() { tryMe(parm1, parm2); }, 200); 

Une offre plus robuste, afin de s'assurer que les valeurs de parm1 , parm2 ne changent pas avant les feux de temporisation (par commentaire de @ lincolnk):

 setTimeout(function() { var p1 = parm1; var p2 = parm2; tryMe(p1, p2); }, 200); 

@patrick dw, vous avez raison, doit être évalué avant.

Vous pouvez envelopper tryMe dans une fermeture.

Par exemple:

 var f = function(){tryMe('some parameter');}; setTimeout(f, 200); 

Ici, nous créons un objet fonction, f , qui appelle tryMe avec le (s) paramètre (s) souhaité (s). Ensuite, nous passons f pour setTimeout . Lorsque le délai d'expiration expire, f sera appelé, ce qui appellera tryMe avec les paramètres souhaités.

Un mot d'avertissement si vous souhaitez passer des paramètres qui peuvent changer avant que le délai d'attente ne soit appelé (par exemple, si vous définissez plusieurs temporisations dans une boucle for ): vous souhaitez lier ces variables comme ceci:

 var f = function(someParamter){return function(){tryMe(someParameter);};}; setTimeout(f(someParameter), 200); 

La raison pour laquelle il fait simplement quelque chose comme

 setTimeout(tryMe('some parameter'), 200); //Does not work. 

Ne fonctionne pas parce que vous transmettez le résultat d'évaluation de tryMe au lieu de l'objet de fonction tryMe lui-même.

Vous n'êtes pas appeler la fonction, le navigateur fait – après 200 millisecondes. Vous ne lui fournissez que la fonction qui nécessite d'être appelée. Firefox permet effectivement de spécifier des paramètres supplémentaires dans l'appel setTimeout :

 setTimeout(tryMe, 200, "first parameter", "second parameter"); 

Cependant, pour autant que je sache, aucun autre navigateur ne supporte cette fonctionnalité afin que vous utilisiez vraiment une fonction de fermeture comme expliqué par d'autres réponses déjà. Ici, vous créez une fonction temporaire dans le seul but d'appeler votre fonction d'origine avec les bons paramètres.

 setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);