Deux questions:
Comment la valeur renvoyée par setInterval
et setTimeout
(celles utilisées pour effacer les temporisateurs) est-elle calculée?
Est-il possible que les deux fonctions retournent la même valeur pendant l'exécution? Par exemple:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
Est-il possible que a
et b
aient la même valeur?
La première est davantage une question à ma connaissance, mais la seconde est plus importante.
Renvoie une valeur qui peut être utilisée pour annuler le temporisateur. Donc, il semblerait peu probable qu'ils retournent la même valeur (sauf s'ils réutilisent des valeurs et que l'un des temporisateurs a déjà été annulé)
Mozilla indique que c'est le DOM niveau 0, mais ne fait pas partie de la spécification. (regardez en bas de la page)
J'ai une référence encore meilleure:
Nabble dit:
SetTimeout et setInterval sont issus de la spécification Javascript d'origine, pré-ECMA. Cette spécification n'est officiellement standardisée nulle part, mais elle est prise en charge par tous les navigateurs Web et la plupart des implémentations du langage Javascript. (Y compris ActionScript.)
Les spécifications pré-ECMA sont souvent appelées API "DOM-0". Comme ils n'ont jamais été standardisés auparavant, il est logique que HTML5 spécifie enfin les API non obsolètes dans le but de fournir un environnement cohérent entre les navigateurs. Surtout lorsque les événements récents ont prouvé qu'il existe des entreprises qui aiment appliquer la lettre de la norme, mais pas l'esprit.
Lisez les spécifications originales ici , ou de Sun (qui était un des premiers endosseurs de JavaScript).
Testé sous Opera 9, Safari 3, Firefox 3 et IE 7.
Tous ont renvoyé des valeurs entières, commençant à 1, puis incrémentant de 1 pour chaque appel à setTimeOut()
et setInterval()
. Cependant, j'ai remarqué que les navigateurs ont démarré les compteurs et les ont traités différemment:
Notez cependant que dans tous les scénarios, il n'y a pas deux identifiants (au moins dans le même onglet) identiques.
Je pense que ce n'est pas un comportement standardisé. Dans Firefox, c'est juste un entier, incrémentant à chaque appel de setTimeout
ou setInterval
. Et non, ils ne peuvent pas avoir la même valeur.
Depuis le site Web de Mozilla:
intervalID est un ID d'intervalle unique que vous pouvez transmettre à clearInterval ().
C'est donc unique :)
Qu'ils puissent avoir la même valeur dépend de l'implémentation JavaScript. Comme Maciej l'a mentionné dans Firefox, ils ne peuvent pas avoir la même valeur que le même compteur utilisé. Cependant, cela peut être différent dans d'autres navigateurs, il est donc préférable de ne pas compter sur eux qui n'ont jamais la même valeur.
Il me semble que la valeur renvoyée est la valeur d'index pour la liste des minuteries/intervalles conservés en interne.
Comme au point, j'ai appelé clearInterval (18) au lieu de clearInterval (var_returned_from_set) et il a arrêté le temporisateur/intervalle souhaité. (Testé FF17.0.1 et IE9.0.8)
Dans mes propres tests, ils semblent également uniques pour la durée de vie de la page pour ces deux navigateurs.