valor de retorno / setTimeout setInterval
-
06-09-2019 - |
Pregunta
Dos preguntas:
-
¿Cómo es el valor devuelto por
setInterval
ysetTimeout
(los que se usan para limpiar los temporizadores) calcula? -
¿Es posible que tanto las funciones que devuelven el mismo valor durante el tiempo de ejecución? Por ejemplo:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
¿Es posible que a
y b
que tienen el mismo valor?
La primera de ellas es más de una pregunta para-mi-conocimiento, pero el segundo es más importante.
Solución
devuelve un valor que puede ser utilizado para cancelar el temporizador . Así, parecería poco probable que vuelvan el mismo valor (a menos que sean los valores de reutilización y uno de los temporizadores ya ha sido cancelada)
Mozilla afirma que es DOM nivel 0, pero no forma parte de la especificación. (busque en la parte inferior de la página)
Tengo una mejor referencia:
Nabble dice:
SetTimeout y setInterval son de la especificación original Javascript, pre-ECMA. Esa no es la especificación estandarizada oficialmente en cualquier lugar, pero que es soportado por todos los navegadores web y la mayoría de las implementaciones de la Lenguaje javascript. (Incluso ActionScript.)
Las especificaciones pre-ECMA son a menudo conocidos como las API DOM- "0". Debido a que tienen Nunca ha sido estandarizada antes, tiene sentido para HTML5 a SPEC finalmente las API no en desuso en un intento para proporcionar un ambiente consistente en todos los navegadores. Especialmente cuando los acontecimientos recientes han demostrado que existe son empresas que les gusta poner en práctica la letra de la norma, pero no el espíritu.
aquí , o de Sun (que era un endosante temprana de JavaScript).
Otros consejos
Probado esto bajo Opera 9, Safari 3, Firefox 3 e Internet Explorer 7.
Todos los valores enteros devueltos, a partir de 1 y luego incrementando en 1 por cada llamada a setTimeOut()
y setInterval()
. Sin embargo, he notado que los navegadores empezaron los contadores y los manejan de forma diferente:
- IE se inició con un número de 6 dígitos (aparentemente) al azar, pero las posteriores llamadas a cualquiera de las funciones incrementa este número. Después de cerrar y volver a abrir el IE me encontré con que el número de partida parecía ser generada de forma aleatoria, ya que no estaba cerca del recuento de la sesión anterior.
- Opera mantiene un contador para cada pestaña - cerrar una pestaña y abrir uno nuevo en marcha el contador de 1 en la nueva pestaña .
- En Safari, el recuento fue global - abrir una nueva pestaña y llamar a las funciones en distintas pestañas parecía incrementar un contador de referencia global .
- En Firefox, el contador apareció para comenzar a las 2, y se incrementa en cada llamada posterior a cualquiera de las funciones. Al igual que Opera, cada pestaña tiene su propio valor del contador, pero parecía que todo el comienzo a las 2.
Aviso sin embargo, que en todos los escenarios, no hay dos identificadores (al menos en la misma pestaña) son los mismos.
Creo que no es un comportamiento estandarizado. En Firefox, es solo número entero, incrementando en cada llamada de setTimeout
o setInterval
. Y, no, no pueden tener el mismo valor.
Desde el sitio web de Mozilla:
intervalID es un identificador único intervalo se puede pasar a clearInterval ().
Por lo tanto, es único:)
Si pueden tener el mismo valor depende de la implementación de JavaScript. Como se mencionó en Firefox Maciej que no pueden tener el mismo valor que se utiliza el mismo contador. Sin embargo, eso podría ser diferente en otros navegadores, por lo que es quizás mejor no confiar en ellos nunca tienen el mismo valor.
Me suena que el valor devuelto es el valor del índice para cualquier lista de temporizadores / intervalos que se mantienen mantiene internamente.
Como en el punto, que se llama clearInterval (18) en lugar de clearInterval (var_returned_from_set) y se detuvo el temporizador / intervalo deseado. (FF17.0.1 Probado y IE9.0.8)
También en mi propia prueba que parecen ser exclusivas para la vida útil de la página para ambos de estos navegadores.