2010-07-28 54 views
8

爲什麼在IE和FF中有不同的輸出?
在IE它顯示:你好並在FF它顯示:這是依賴於瀏覽器的JavaScript代碼嗎?

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

是什麼standarad?哪個瀏覽器做對了?

注:如果我轉換10至FF 11話,就說明你好

+0

這可能是比什麼都重要的計時問題。你能提供一些關於這個實際應用的信息給你正在做的事情嗎? – jtbandes 2010-07-28 06:31:41

回答

1

在我的電腦上,我在FF和IE中都運行了它,而我的結果完全相反。

原因是您的超時時間只有10毫秒。 Timers on Windows的解析度實際上大約是10ms,所以有可能首先發生超時。要確定一件事發生在另一件事之前,你應該在超時之間有一個更大的差距。

即使這樣,你不應該指望它總是:-)

工作,如果你真的想要做的事情以相同的順序,保持它在同一行的代碼,或設置標誌是否說或者沒有完成一個特定的動作,並在做第二個依賴於第一個動作之前檢查它。

0

瀏覽器無法保證定時器事件的執行順序。它們由操作系統的本地定時器實現在內部處理,並可能以不同的順序觸發。

由於您指定了這麼短的時間,所以情況很可能如此。

0

那麼我清楚地把握它。

Firefox沒有什麼是你所期望的即:

  • 後第二&高速緩存的1/100 消息值設置的第一條消息。
  • 立即顯示第二條消息。
  • 顯示第一條消息{if 100 secs over}。

雖然什麼IE的作用是什麼帶來的疑問:

  • 之後的第二1 /第100 設置消息。
  • 將消息設置爲新值,忽略新超時。
  • 顯示消息{if 1/100 secs over}。

所以基本上我知道的是消息變量在IE中有一個全局作用域,而firefox創建了最後傳遞給超時函數的值的緩存。 爲了實現這一點,有可能使用的1000 & 10000(1 & 10秒)而不是0 & 10。這更長的時間內會告訴你,火狐顯示警報的兩倍,而IE只有一次。

+0

嗯,我猜這個ben清楚地看到了爲什麼會發生這種情況。 – loxxy 2010-07-28 07:56:35