2010-07-28 11 views
8

Perché output diversi in IE e FF?
In IE la sua mostra: Ciao e in FF la sua mostra: HiÈ questo codice javascript dipendente dal browser?

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

che cosa è standarad? quale browser lo sta facendo bene?

Nota: Se converto 10 a 11 in FF poi mostra Ciao

+0

Questo è probabilmente più un problema di temporizzazione che altro. Puoi fornire alcune informazioni sull'applicazione effettiva di questo a quello che stai facendo? – jtbandes

risposta

1

Sul mio PC l'ho eseguito sia in FF che in IE, e ho avuto esattamente risultati opposti.

Il motivo di ciò è che il timeout è di soli 10 millisecondi. La risoluzione di Timer su Windows è in realtà di circa 10 ms, quindi è possibile che il timeout possa avvenire prima. Per essere veramente sicuri che una cosa avvenga prima dell'altra, si dovrebbe sicuramente avere un divario più ampio tra i timeout.

E anche allora, non si deve aspettare che funzioni sempre :-)

Se davvero si vuole fare le cose nello stesso ordine, tenerlo nella stessa riga di codice, o impostare le segnalazioni dire se o non è stata completata una particolare azione, e controllare che prima di fare una seconda che si basa sul primo.

0

L'ordine di esecuzione per eventi timer non è garantito nei browser. Sono gestiti internamente dall'implementazione del timer nativo del sistema operativo e possono essere attivati ​​in ordine diverso.

Poiché è stata specificata una quantità di tempo così limitata, è molto probabile che sia così.

0

Beh, chiaramente lo capisco.

Cosa Firefox è quello che ci si aspetta cioè:

  • imposta il primo messaggio dopo 1/100 ° di secondo & cache il valore del messaggio.
  • Mostra immediatamente il secondo messaggio.
  • Mostra il primo messaggio {se 100 secondi su}.

mentre ciò che IE fa è quello che porta il dubbio:

  • imposta il messaggio dopo il 1/100th di secondo.
  • Imposta il messaggio su un nuovo valore, ignora i nuovi timeout.
  • Mostra il messaggio {if 1/100 sec. Su}.

Così Fondamentalmente quello che capiscono è che la variabile messaggio ha una portata globale in IE mentre Firefox crea una cache con l'ultimo valore passato alla funzione di timeout. Per realizzare questo, utilizzare periodi di tempo più lunghi possibilmente di 1000 & 10000 (1 & 10 sec) invece di 0 & 10. Questo mostrerà che Firefox visualizza l'avviso due volte mentre IE solo una volta.

+0

Beh, immagino che ben ha dato una chiara visione del perché questo stava accadendo. – loxxy

Problemi correlati