73 votes

Le rappel setInterval ne s'exécute qu'une seule fois

J'ai ce compteur que j'ai fait mais je veux qu'il fonctionne pour toujours, c'est vraiment simple, qu'est-ce que je fais mal ici?

 function timer() {
  console.log("timer!")
}

window.setInterval(timer(), 1000)
 

119voto

koenpeters Points 4447

Vous avez utilisé un appel de fonction au lieu d'une référence de fonction comme premier paramètre de setInterval. Fais-le comme ça:

 function timer() {
  console.log("timer!");
}

window.setInterval(timer, 1000);
 

Ou plus court (mais quand la fonction devient plus grande aussi moins lisible):

 window.setInterval( function() {
  console.log("timer!");
}, 1000)
 

11voto

Bakudan Points 5469

setInterval et setTimeout doit être utilisé avec des rappels, comme:

setInterval(timer, 1000);

ou sans nom des fonctions:

setInterval( function() { console.log("timer!"); }, 1000 );

Pourquoi ton code ne fonctionne pas lorsque vous passer une fonction comme argument d'une autre fonction avec des crochets par exemple, doSomething ( someFunc() ) vous êtes de passage le résultat de la fonction.

Lorsque la fonction est passée comme objet, par ex. doSomething ( someFunc ) vous êtes de passage à un rappel. De cette façon, someFunc est passé comme référence et qu'il est exécuté quelque part dans la fonction appelante. C'est la même chose que les pointeurs de fonctions dans d'autres langues.

Une erreur commune est d'utiliser ces deux fonctions comme indiqué à w3schools. Cela fait un appel implicite à l' eval.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X