setInterval / setTimeout valeur de retour
-
06-09-2019 - |
Question
Deux questions:
-
Comment est calculée la valeur retournée par
setInterval
etsetTimeout
(ceux utilisés pour effacer les compteurs)? -
Est-il possible pour les deux fonctions de retourner la même valeur lors de l'exécution? Par exemple:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
Est-il possible pour a
et b
d'avoir la même valeur?
Le premier est plus d'une question-ma connaissance, mais le second est plus important.
La solution
Renvoie une valeur qui peut être utilisée pour annuler la minuterie . Ainsi, il semble peu probable qu'ils retournent la même valeur (à moins qu'ils réutilisent les valeurs et l'un des minuteries a déjà été annulée)
Mozilla indique son niveau DOM 0, mais ne fait pas partie de la spécification. (regarder au bas de la page)
J'ai une référence encore mieux:
Nabble dit:
SetTimeout et setInterval sont de la spécification Javascript d'origine, pré-ECMA. Cette spécification n'est pas officiellement normalisé partout, mais il est pris en charge par tous les navigateurs web et la plupart des implémentations du Javascript langue. (Comprenant ActionScript.)
Les spécifications pré-ECMA sont souvent connus sous le nom les API "DOM-0". Comme ils ont jamais été normalisée avant, il est logique pour HTML5 SPEC enfin les API non dépréciées dans une tentative de fournir un environnement cohérent à travers les navigateurs. En particulier lorsque les événements récents ont prouvé qu'il y sont des entreprises qui aiment à mettre en œuvre la lettre de la norme, mais pas l'esprit.
Lire la ou Sun (qui était un endosseur début de JavaScript).
Autres conseils
testé cette sous Opera 9, Safari 3, Firefox 3 et IE 7.
Toutes les valeurs entières de retour, en commençant à 1 et incrémenter ensuite de 1 pour chaque appel à setTimeOut()
et setInterval()
. Cependant, je remarque que les navigateurs ont commencé les compteurs et les traiter différemment:
- IE a commencé avec un (apparemment) aléatoire numéro à 6 chiffres, mais les appels suivants à une ou l'autre fonction incrémente ce nombre. Après la fermeture et la réouverture IE j'ai trouvé que le numéro de départ semble être généré au hasard, car il était loin d'être le compte de la session précédente.
- Opera a maintenu un compteur pour chaque onglet - la fermeture d'un onglet et l'ouverture d'un nouveau a commencé le compteur de 1 dans le nouvel onglet .
- Dans Safari, le compte était global - l'ouverture d'un nouvel onglet et appeler les fonctions dans différents onglets semblait incrémenter un compteur de référence global .
- Dans Firefox, le compteur est apparu commencer à 2, et incrémenté à chaque appel suivant soit la fonction. Comme Opera, chaque onglet avait sa propre contre-valeur, mais ils semblaient tous commencer à 2.
Remarquez cependant, que dans tous les scénarios, pas deux identifiants (au moins dans le même onglet) sont les mêmes.
Je pense que ce n'est pas un comportement standardisé. Dans Firefox, il est juste entier, incrémenter à chaque appel de setTimeout
ou setInterval
. Et, non, ils ne peuvent pas avoir la même valeur.
Sur le site de Mozilla:
intervalID est un ID unique d'intervalle, vous pouvez passer à clearInterval ().
Il est unique:)
Qu'ils peuvent avoir la même valeur dépend de la mise en œuvre JavaScript. Comme mentionné dans Firefox Maciej ils ne peuvent pas avoir la même valeur que le même compteur est utilisé. Toutefois, cela pourrait être différent dans d'autres navigateurs, il est peut-être préférable de ne pas compter sur eux ne jamais avoir la même valeur.
Il me semble que la valeur retournée est la valeur d'index pour tout maintenu en interne la liste des minuteries / intervalles ils gardent.
Point, j'ai appelé clearInterval (18) au lieu de clearInterval (var_returned_from_set) et il arrête le temporisateur / intervalle désiré. (Testé FF17.0.1 et IE9.0.8)
Aussi dans mes propres tests, ils semblent être unique pour la durée de vie de la page pour ces deux navigateurs.