Veuillez indiquer comment passer des paramètres dans une fonction appelée using setInterval
.
Mon exemple setInterval(funca(10,3), 500);
est incorrect.
javascript
parameters
setinterval
Rakesh
la source
la source
.setInterval(func, delay[, param1, param2, ...]);
Réponses:
Vous devez créer une fonction anonyme pour que la fonction réelle ne soit pas exécutée immédiatement.
la source
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Ensuite, appelez-le commecreateInterval(funca,dynamicValue,500);
vous pouvez évidemment l'étendre pour plus d'un paramètre. Et, s'il vous plaît, utilisez des noms de variables plus descriptifs. :)funca
?maintenant avec ES5, méthode de liaison Prototype de fonction:
Référence ici
la source
console.log.bind(null)("Log me")
va lancerIllegal invocation
, maisconsole.log.bind(console)("Log me")
fonctionnera comme prévu. C'est parce queconsole.log
requiertconsole
commethis
argument.Ajoutez-les en tant que paramètres à setInterval:
La syntaxe de votre question utilise eval, ce qui n'est pas une pratique recommandée.
la source
Vous pouvez passer le (s) paramètre (s) en tant que propriété de l'objet fonction, pas en tant que paramètre:
Ensuite, dans votre fonction
someFunction
, vous aurez accès aux paramètres. Ceci est particulièrement utile dans les classes où la portée va automatiquement à l'espace global et vous perdez les références à la classe qui a appelé setInterval pour commencer. Avec cette approche, "parameter2" dans "someFunction", dans l'exemple ci-dessus, aura la bonne portée.la source
la source
Vous pouvez utiliser une fonction anonyme;
la source
Mise à jour: 2018 - utilisez l'opérateur "spread"
la source
La réponse de loin la plus pratique est celle donnée par tvanfosson, tout ce que je peux faire est de vous donner une version mise à jour avec ES6:
la source
Citer les arguments devrait suffire:
Notez la citation unique
'
pour chaque argument.Testé avec IE8, Chrome et FireFox
la source
Je sais que ce sujet est tellement ancien mais voici ma solution pour passer des paramètres en
setInterval
fonction.Html:
JavaScript:
la source
timer
), mais comment faites-vousclearInterval()
dans ce scénario?Cela fonctionne
setInterval("foo(bar)",int,lang);
... Jon Kleiser m'amène à la réponse.la source
Une autre solution consiste à passer votre fonction comme ça (si vous avez des vars dynamiques): setInterval ('funca (' + x + ',' + y + ')', 500);
la source
Vous pouvez utiliser une bibliothèque appelée underscore js. Il donne un bon emballage sur la méthode de liaison et est également une syntaxe beaucoup plus propre. Vous permettant d'exécuter la fonction dans la portée spécifiée.
http://underscorejs.org/#bind
_.bind (fonction, portée, * arguments)
la source
Ce problème serait une belle démonstration de l'utilisation des fermetures. L'idée est qu'une fonction utilise une variable de portée externe. Voici un exemple...
La fonction "makeClosure" renvoie une autre fonction, qui a accès à la variable de portée externe "nom". Donc, fondamentalement, vous devez transmettre toutes les variables à la fonction "makeClosure" et les utiliser dans la fonction affectée à la variable "ret". Affectueusement, setInterval exécutera la fonction affectée à "ret".
la source
J'ai eu le même problème avec l'application Vue. Dans mon cas, cette solution ne fonctionne que si la fonction anonyme a déclaré comme fonction flèche, en ce qui concerne la déclaration au
mounted ()
crochet du cercle de vie.la source