javascript - loop - js delay function
setInterval/setTimeout return value (6)
Creo que no es un comportamiento estandarizado. En Firefox, es solo un entero, incrementándose en cada llamada de setTimeout
o setInterval
. Y, no, no pueden tener el mismo valor.
Dos preguntas:
¿Cómo se
setInterval
el valor devuelto porsetInterval
ysetTimeout
(los utilizados para borrar los temporizadores)?¿Es posible que ambas funciones devuelvan 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
tengan el mismo valor?
El primero es más una pregunta de mi conocimiento, pero el segundo es más importante.
Desde el sitio web de Mozilla:
intervalID es una identificación de intervalo única que puede pasar a clearInterval ().
Entonces es único :)
Me parece que el valor devuelto es el valor de índice para cualquier lista internamente mantenida de temporizadores / intervalos que guardan.
Como en el punto, llamé a clearInterval (18) en lugar de clearInterval (var_returned_from_set) y detuvo el temporizador / intervalo deseado. (Probado FF17.0.1 e IE9.0.8)
También en mis propias pruebas parecen ser únicas durante la vida de la página para ambos navegadores.
Probado en Opera 9, Safari 3, Firefox 3 e IE 7.
Todos devolvieron valores enteros, comenzando en 1 y luego incrementándose en 1 para cada llamada a setTimeOut()
y setInterval()
. Sin embargo, noté que los navegadores iniciaron los contadores y los manejaron de manera diferente:
- IE comenzó con un número aleatorio (aparentemente) de 6 dígitos, pero las llamadas posteriores a cualquiera de las funciones aumentaron este número. Después de cerrar y volver a abrir IE, descubrí que el número inicial parecía generarse aleatoriamente, ya que no estaba ni cerca del recuento de la sesión anterior.
- Opera mantuvo un contador para cada pestaña: cerrar una pestaña y abrir una nueva inició el contador desde 1 en la nueva pestaña.
- En Safari, el recuento era global: abrir una nueva pestaña y llamar a las funciones en diferentes pestañas parecía incrementar un contador de referencia global.
- En Firefox, el contador pareció comenzar en 2, y se incrementó en cada llamada posterior a cualquiera de las funciones. Al igual que Opera, cada pestaña tenía su propio valor de contador, pero todos parecían comenzar en 2.
Sin embargo, tenga en cuenta que en todos los escenarios, no hay dos identificadores (al menos en la misma pestaña) que sean iguales.
Si pueden tener el mismo valor depende de la implementación de JavaScript. Como mencionó Maciej en Firefox, no pueden tener el mismo valor ya que se usa el mismo contador. Sin embargo, eso podría ser diferente en otros navegadores, por lo que quizás sea mejor no confiar en que nunca tendrán el mismo valor.
Devuelve un valor que puede usarse para cancelar el temporizador. Por lo tanto, parece poco probable que devuelvan el mismo valor (a menos que reutilicen los valores y uno de los temporizadores ya haya sido cancelado)
Mozilla afirma que es DOM nivel 0, pero no parte de la especificación. (mira en la parte inferior de la página)
Tengo una referencia aún mejor:
Nabble dice:
SetTimeout y setInterval son de la especificación original de Javascript, pre-ECMA. Esa especificación no está oficialmente estandarizada en ninguna parte, pero es compatible con todos los navegadores web y la mayoría de las implementaciones del lenguaje Javascript. (Incluyendo ActionScript).
Las especificaciones pre-ECMA a menudo se conocen como las API "DOM-0". Como nunca antes se han estandarizado, tiene sentido que HTML5 especifique finalmente las API no desaprovechadas en un intento de proporcionar un entorno coherente en todos los navegadores. Especialmente cuando los eventos recientes han demostrado que hay compañías a las que les gusta implementar la letra del estándar, pero no el espíritu.
Lea las especificaciones originales here , o de Sun (que fue uno de los primeros en aprobar JavaScript).