鴻蒙傳說
2018-11-23 19:14:31
setTimeout(fn,200),這里指定的時間,是指程序一開始運行就計算了嗎?還是說等到執(zhí)行完主線程的任務(wù)后,回調(diào)異步任務(wù)列表的時候才開始計算?
1 回答

開滿天機
TA貢獻1786條經(jīng)驗 獲得超13個贊
這個解釋起來有點復(fù)雜
首先你要明白Javascript是單線程,單線程就意味著所有任務(wù)需要排隊。然后會將所有任務(wù)分成兩類:同步任務(wù)和異步任務(wù)!同步任務(wù):在主線程上執(zhí)行的任務(wù),只有前一個任務(wù)執(zhí)行完成,才會執(zhí)行后一個!異步任務(wù):不進入主線程、而進入“任務(wù)隊列”的任務(wù),當(dāng)主線程上的任務(wù)執(zhí)行完,主線程才會去執(zhí)行“任務(wù)隊列”。
對于setTimeout(fn,200)
,當(dāng)?shù)?00ms時,fn
會被放進“任務(wù)隊列”,而“任務(wù)隊列”必須要等到主線程已有的代碼執(zhí)行完才會執(zhí)行fn
,所以當(dāng)程序執(zhí)行到setTimeout(fn,200)
這一行時,時間就開始計算,但是fn
實際執(zhí)行時并不一定是在200ms后,可能是在更久的時間后(取決于主線程上的同步代碼的執(zhí)行時間)。
添加回答
舉報
0/150
提交
取消