web-dev-qa-db-fra.com

Pourquoi 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)
63
computer_smile

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)
100
Koen Peters

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

setInterval(timer, 1000);

ou fonctions sans nom:

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

Pourquoi votre code ne fonctionne pas - lorsque vous passez une fonction en argument à une autre fonction avec des crochets, par exemple doSomething ( someFunc() ) vous passez le résultat de la fonction.

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

Une erreur courante consiste à utiliser ces deux fonctions comme indiqué dans w3schools . Cela fait un appel implicite à eval.

9
Bakudan