Question

Deux questions:

  1. Comment est calculée la valeur retournée par setInterval et setTimeout (ceux utilisés pour effacer les compteurs)?

  2. 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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top