爲什麼在IE和FF中有不同的輸出?
在IE它顯示:你好並在FF它顯示:嗨這是依賴於瀏覽器的JavaScript代碼嗎?
var message = "Hi";
setTimeout(function(){alert(message);},10);
setTimeout(function(){message = "Hello";},0);
是什麼standarad?哪個瀏覽器做對了?
注:如果我轉換10至FF 11話,就說明你好
爲什麼在IE和FF中有不同的輸出?
在IE它顯示:你好並在FF它顯示:嗨這是依賴於瀏覽器的JavaScript代碼嗎?
var message = "Hi";
setTimeout(function(){alert(message);},10);
setTimeout(function(){message = "Hello";},0);
是什麼standarad?哪個瀏覽器做對了?
注:如果我轉換10至FF 11話,就說明你好
火狐不同的方式處理小延遲IE。 Firefox有10毫秒的最小延遲時間(這也不準確)。 有關更多信息,請參閱https://developer.mozilla.org/en/window.setTimeout的註釋。
在我的電腦上,我在FF和IE中都運行了它,而我的結果完全相反。
原因是您的超時時間只有10毫秒。 Timers on Windows的解析度實際上大約是10ms,所以有可能首先發生超時。要確定一件事發生在另一件事之前,你應該在超時之間有一個更大的差距。
即使這樣,你不應該指望它總是:-)
工作,如果你真的想要做的事情以相同的順序,保持它在同一行的代碼,或設置標誌是否說或者沒有完成一個特定的動作,並在做第二個依賴於第一個動作之前檢查它。
瀏覽器無法保證定時器事件的執行順序。它們由操作系統的本地定時器實現在內部處理,並可能以不同的順序觸發。
由於您指定了這麼短的時間,所以情況很可能如此。
那麼我清楚地把握它。
Firefox沒有什麼是你所期望的即:
雖然什麼IE的作用是什麼帶來的疑問:
所以基本上我知道的是消息變量在IE中有一個全局作用域,而firefox創建了最後傳遞給超時函數的值的緩存。 爲了實現這一點,有可能使用的1000 & 10000(1 & 10秒)而不是0 & 10。這更長的時間內會告訴你,火狐顯示警報的兩倍,而IE只有一次。
嗯,我猜這個ben清楚地看到了爲什麼會發生這種情況。 – loxxy 2010-07-28 07:56:35
這可能是比什麼都重要的計時問題。你能提供一些關於這個實際應用的信息給你正在做的事情嗎? – jtbandes 2010-07-28 06:31:41