在windows的瀏覽器上執行這段程式碼和在mac上執行這段程式碼的執行時間差異很大。
此方法是沒1ms執行一次輸出。為什麼windows和mac會有差異呢? mac上明顯更慢。
var time =0;
var interval = setInterval(function(){
time++;
console.log("time="+time);
if(time===100){
clearInterval(interval);
}
},1);
是的,很多時候settimeout和setinterval都不是特別的準的,原因就是js是單線程的
setInterval的回呼函數並不是到時後立即執行,而是等系統計算資源空閒下來後才會執行
而下次觸發時間則是在setInterval回呼函數執行完畢之後才開始計時
所以如果setInterval內執行的計算太耗時
或有其他耗時任務在執行,setInterval的計時會越來越不準,延遲很厲害.
給你一個簡單的例子:
你猜誰先執行?雖然我們說
js
是單線程的,但是瀏覽器是可以控制多線程的,當我們設定setTimeOut
的時候,其實瀏覽器會呼叫一個線程,而這個線程就叫做Event Loop
,讓這個執行緒幫我們去執行,而主執行緒則繼續執行下面的程式碼,也就是我們常會說到的非同步模式
。