Sont clearTimeout et clearInterval le même?
Lorsque vous travaillez sur un peu de Javascript pour une application web, j'ai remarqué que j'avais utilisé setTimeout
, mais j'avais essayé de l'effacer avec clearInterval
et il a arrêté le délai d'attente de se produire dans Google Chrome et Internet Explorer 9.
Sont clearTimeout
et clearInterval
interchangeables?
Voici un JSfiddle avec un exemple de ce dont je parle.
- Alors que c'est probablement vrai dans la plupart des implémentations, vous ne devriez pas compter sur elle car elle n'est pas définie de cette façon.
- Il peut fonctionner dans certains navigateurs, mais il pourrait ne pas fonctionner de la même dans tous les navigateurs, je ne voudrais pas le faire.
- La grande question (et réponses) merci de me le demander!
- Je l'ai remarqué aussi, et juste testé en Node.js car Nœud semble avoir une très différents de mise en œuvre de l'intervalle de délai d'attente et (ils retournent des objets au lieu de numérique IDs). Mais le comportement est présent là aussi: vous pouvez appeler clearTimeout avec l'objet renvoyé de setInterval et il ne fait en fin de cycle.
Vous devez vous connecter pour publier un commentaire.
Non, ils ne sont pas interchangeables.
Sûr, certains navigateurs peuvent partager le même code pour effacer les intervalles et les délais d'attente de la même façon, mais ne signifie pas qu'ils sont interchangeables et vous êtes certainement pas garanti qu'ils agiraient de la même manière sur tous les navigateur implémentations. Il revient à ces deux méthodes étant définie différemment pour différentes fins et, par conséquent, vous devez les utiliser pour leurs usages désignés.. Sinon, vous êtes juste des ennuis.
En fait, je crois que nous pouvons nous faire une assez forte conclusion du W3C spec (http://www.w3.org/TR/html5/webappapis.html#timers). Il n'est pas expressément garanti, mais nous avons beaucoup de preuves que presque toute la mise en œuvre raisonnable aurait ce comportement:
1) délais d'attente et les Intervalles en fait utiliser la même fonction sous-jacente:
2) Cette fonction unique - le "timer étapes d'initialisation" mentionné ci - dessus utilise une seule liste de minuteries:
3) clearTimeout() et la fonction clearInterval() à la fois sur cette liste (et, en fait, ne sont pas différenciés par la spec en quelque sorte)
Je crois que cela présente un assez fort que clearTimeout et clearInterval devrait par synonyme selon la spécification. Ceci est soutenu par le fait que cela fonctionne dans tous les navigateurs que j'ai testé (Chrome 37, Firefox 33, et Opera 25).
setInterval
etclearTimeout
ensemble: w3.org/TR/page-visibility/#introductionDe la Mozilla référence:
Même si ils peuvent être utilisés comme des synonymes maintenant, il peut modifier à tout moment dans l'avenir. Pourquoi ne pas appeler un chat un chat? 🙂