2010-07-28 32 views
8

¿Por qué diferentes salidas en IE y FF?
En IE su actuación: Hola y FF En su estreno: Hola¿Este código javascript depende del navegador?

var message = "Hi"; 
setTimeout(function(){alert(message);},10); 
setTimeout(function(){message = "Hello";},0); 

lo que es standarad? qué navegador lo está haciendo bien?

Nota: si puedo convertir 10 a 11 en FF entonces se muestra Hola

+0

Esto es probablemente más un problema de tiempo que cualquier otra cosa. ¿Puede proporcionarnos cierta información sobre la aplicación real de esto a lo que sea que esté haciendo? – jtbandes

Respuesta

1

En mi PC lo ejecuté tanto en FF como en IE, y tuve exactamente los resultados opuestos.

La razón de esto es que su tiempo de espera es de solo 10 milisegundos. La resolución de Timers en Windows es de unos 10 ms, por lo que es posible que el tiempo de espera sea el primero. Para estar realmente seguro de que una cosa sucede antes que la otra, definitivamente debe tener una brecha más amplia entre los tiempos de espera.

Y aun así, no se debe esperar que funcione siempre :-)

Si realmente quiere hacer las cosas en el mismo orden, que sea en la misma línea de código, o definir indicadores decir si o no se ha completado una acción en particular, y verifique eso antes de hacer una segunda que dependa de la primera.

0

El orden de ejecución de los eventos del temporizador no está garantizado en los navegadores. Se manejan internamente mediante la implementación del temporizador nativo del sistema operativo y pueden dispararse en diferente orden.

Dado que ha especificado una cantidad de tiempo tan pequeña, es muy probable que este sea el caso.

0

Bueno, claramente lo capto.

Lo que hace Firefox es lo que se espera es decir:

  • establece el primer mensaje después de 1/100th de un segundo & cachés el valor del mensaje.
  • Muestra el segundo mensaje inmediatamente.
  • Muestra el primer mensaje {if 100 secs over}.

Mientras lo hace IE es lo que trae la duda:

  • establece el mensaje después de 1/100th de un segundo .
  • Establece el mensaje en el nuevo valor, ignora los nuevos tiempos de espera.
  • Muestra el mensaje {if 1/100 secs over}.

Así que básicamente me doy cuenta de que la variable de mensaje tiene un alcance global en IE mientras que firefox crea una memoria caché del último valor pasado a la función de tiempo de espera. Para realizar esto, use periodos de tiempo más largos posiblemente de 1000 & 10000 (1 & 10 seg) en lugar de 0 & 10. Esto le mostrará que firefox muestra la alerta dos veces mientras que IE solo una vez.

+0

Bueno, supongo que Ben dio una idea clara de por qué sucedía esto. – loxxy

Cuestiones relacionadas