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