搜尋

首頁  >  問答  >  主體

javascript-setInterval

在windows的瀏覽器上執行這段程式碼和在mac上執行這段程式碼的執行時間差異很大。
此方法是沒1ms執行一次輸出。為什麼windows和mac會有差異呢? mac上明顯更慢。

var time =0;
var interval = setInterval(function(){
    time++;
    console.log("time="+time);
    if(time===100){
        clearInterval(interval);
    }
},1);
阿神阿神2729 天前704

全部回覆(2)我來回復

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-12 09:26:04

    是的,很多時候settimeout和setinterval都不是特別的準的,原因就是js是單線程的

    setInterval的回呼函數並不是到時後立即執行,而是等系統計算資源空閒下來後才會執行

    而下次觸發時間則是在setInterval回呼函數執行完畢之後才開始計時

    所以如果setInterval內執行的計算太耗時

    或有其他耗時任務在執行,setInterval的計時會越來越不準,延遲很厲害.

    回覆
    0
  • 欧阳克

    欧阳克2017-06-12 09:26:04

    給你一個簡單的例子:

    <script type="text/javascript">
            setTimeout(function(){
                console.log('a');
            } , 0);
            console.log('b');
    </script>

    你猜誰先執行?雖然我們說js是單線程的,但是瀏覽器是可以控制多線程的,當我們設定setTimeOut的時候,其實瀏覽器會呼叫一個線程,而這個線程就叫做Event Loop,讓這個執行緒幫我們去執行,而主執行緒則繼續執行下面的程式碼,也就是我們常會說到的非同步模式

    回覆
    0
  • 取消回覆