javascript - setTimeout的延遲時間,是從什麼時間段開始算起的?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-07-05 11:03:30
0
3
1222

setTimeout(fn,200),這裡指定的時間,是指程式一開始運作就計算了嗎?還是說等到執行完主執行緒的任務後,回調非同步任務清單的時候才開始計算?

女神的闺蜜爱上我
女神的闺蜜爱上我

全部回覆 (3)
世界只因有你

這個解釋起來有點複雜
首先你要明白Javascript是單線程,單線程就意味著所有任務都需要排隊。然後會將所有任務分成兩類:同步任務和非同步任務!同步任務:在主執行緒上執行的任務,只有前一個任務執行完成,才會執行後一個!非同步任務:不進入主執行緒、而進入「任務佇列」的任務,當主執行緒上的任務執行完,主執行緒才會去執行「任務佇列」。

對於setTimeout(fn,200),當到200ms時,fn會被放進“任務隊列”,而“任務隊列”必須要等到主線程已有的代碼執行完才會執行fn,所以當程式執行到setTimeout(fn,200)這一行時,時間就開始計算,但是fn實際執行時並不一定是在200ms後,可能是在更久的時間後(取決於主線程上的同步程式碼的執行時間)。

    学霸

    簡單的講setTimeout(fn,200)需要等到當前函數呼叫堆疊(主進程上的同步任務)清空之後才開始執行,會在下一輪事件循環(主執行緒從"任務佇列"讀取事件)開始時執行,setTimeout只上將事件插入了"任務佇列",這裡設定的時間是相對於在下一輪事件循環開始時的時間的間隔。

      巴扎黑

      setTimeout(fn,200)呼叫時開始計時。

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!