48 votes

Est-ce que clearTimeout et clearInterval sont les mêmes ?

En travaillant sur du Javascript pour une application web, j'ai remarqué que j'avais utilisé setTimeout mais j'avais essayé de l'effacer avec clearInterval et cela a empêché le délai d'attente de se produire dans Google Chrome et Internet Explorer 9.

Sont clearTimeout y clearInterval interchangeables ?

Voici un JSfiddle avec un exemple de ce dont je parle.

31voto

lemiant Points 721

En fait, je pense que nous pouvons tirer une conclusion assez forte de la spécification du W3C ( http://www.w3.org/TR/html5/webappapis.html#timers ). Ce n'est pas explicitement garanti mais nous avons beaucoup de preuves que presque toute implémentation raisonnable aurait ce comportement :

1) Les délais et les intervalles utilisent en fait la même fonction sous-jacente :

La méthode setTimeout() doit retourner la valeur renvoyée par les étapes d'initialisation de la minuterie, en leur passant les arguments de la méthode... et le drapeau de répétition réglé sur false.

La méthode setInterval() doit retourner la valeur renvoyée par les étapes d'initialisation du timer, en leur passant les arguments de la méthode. en leur passant les arguments de la méthode.... et l'indicateur de répétition à true. l'indicateur de répétition défini sur true.

2) Cette fonction unique - les "étapes d'initialisation des minuteries" mentionnées ci-dessus - utilise une seule liste de minuteries :

2, ...que handle soit un nombre entier supérieur à zéro défini par l'agent utilisateur. qui identifiera le délai d'attente qui sera défini par cet appel dans la liste de temporisations actives.

10, poignée de retour...

3) clearTimeout() et clearInterval() opèrent tous deux sur cette liste (et ne sont en fait pas différenciés par la spécification de quelque manière que ce soit)

Les méthodes clearTimeout() et clearInterval() doivent effacer l'entrée identifiée comme handle de la liste des temporisateurs actifs de l'objet de l'objet WindowTimers sur lequel la méthode a été invoquée, où handle est l'argument transmis à la méthode, le cas échéant. (Si handle ne identifie pas une entrée dans la liste des horloges actives de l'objet WindowTimers sur lequel la méthode a été invoquée, la méthode ne fait rien).

Je pense que cela présente un cas assez fort que clearTimeout et clearInterval devraient être synonymes selon la spécification. Cela est étayé par le fait que cela fonctionne dans tous les navigateurs que j'ai testés (Chrome 37, Firefox 33 et Opera 25).

27voto

rgthree Points 6325

Non, ils ne sont pas interchangeables.

Bien sûr, certains navigateurs peuvent très bien partager le même code pour effacer les intervalles et les délais de la même manière, mais cela ne signifie pas qu'ils sont interchangeable et il n'est certainement pas garanti qu'ils fonctionnent de la même manière dans toutes les implémentations de navigateur. En fait, ces deux méthodes sont définies différemment à des fins différentes et vous devez donc les utiliser pour les usages auxquels elles sont destinées Sinon, vous ne faites que chercher les ennuis.

22voto

Tom Auger Points 4246

De la Référence Mozilla :

Il est intéressant de noter que le pool d'identifiants utilisé par setTimeout() et setInterval() sont partagés, ce qui signifie que vous pouvez techniquement utiliser clearTimeout() et clearInterval() de manière interchangeable. Cependant, par souci de Cependant, pour des raisons de clarté, vous devez éviter de le faire.

0voto

YMMD Points 1737

Même s'ils peuvent être utilisés comme synonymes aujourd'hui, cela peut changer à tout moment dans le futur. Pourquoi ne pas appeler un chat un chat ? :-)

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