1. 程式人生 > >js執行隊列、順序

js執行隊列、順序

執行時間 事件 代碼執行 str 線程 隊列 一個 time 主線程

問題:setTimeout的延遲事件,是從什麽時候開始算起的?

答:

首先你要明白Javascript是單線程,單線程就意味著所有任務需要排隊。然後會將所有任務分成兩類:同步任務和異步任務!同步任務:在主線程上執行的任務,只有前一個任務執行完成,才會執行後一個!異步任務:不進入主線程、而進入“任務隊列”的任務,當主線程上的任務執行完,主線程才會去執行“任務隊列”。

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

js執行隊列、順序