久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - setTimeout的延遲時間,是從什么時間段開始算起的?

瀏覽:116日期:2023-02-19 15:42:47

問題描述

setTimeout(fn,200),這里指定的時間,是指程序一開始運(yùn)行就計算了嗎?還是說等到執(zhí)行完主線程的任務(wù)后,回調(diào)異步任務(wù)列表的時候才開始計算?

問題解答

回答1:

這個解釋起來有點(diǎn)復(fù)雜首先你要明白Javascript是單線程,單線程就意味著所有任務(wù)需要排隊。然后會將所有任務(wù)分成兩類:同步任務(wù)和異步任務(wù)!同步任務(wù):在主線程上執(zhí)行的任務(wù),只有前一個任務(wù)執(zhí)行完成,才會執(zhí)行后一個!異步任務(wù):不進(jìn)入主線程、而進(jìn)入“任務(wù)隊列”的任務(wù),當(dāng)主線程上的任務(wù)執(zhí)行完,主線程才會去執(zhí)行“任務(wù)隊列”。

對于setTimeout(fn,200),當(dāng)?shù)?00ms時,fn會被放進(jìn)“任務(wù)隊列”,而“任務(wù)隊列”必須要等到主線程已有的代碼執(zhí)行完才會執(zhí)行fn,所以當(dāng)程序執(zhí)行到setTimeout(fn,200)這一行時,時間就開始計算,但是fn實際執(zhí)行時并不一定是在200ms后,可能是在更久的時間后(取決于主線程上的同步代碼的執(zhí)行時間)。

回答2:

簡單的講setTimeout(fn,200)需要等到當(dāng)前函數(shù)調(diào)用棧(主進(jìn)程上的同步任務(wù))清空之后才開始執(zhí)行,會在下一輪事件循環(huán)(主線程從'任務(wù)隊列'中讀取事件)開始時執(zhí)行,setTimeout只上將事件插入了'任務(wù)隊列',這里設(shè)置的時間是相對于在下一輪事件循環(huán)開始時的時間的間隔。

回答3:

從 setTimeout(fn,200) 調(diào)用時開始計時。

標(biāo)簽: JavaScript
主站蜘蛛池模板: 陆河县| 恩施市| 苍山县| 福海县| 定襄县| 贡山| 建始县| 鲁山县| 陵川县| 淮北市| 原阳县| 红原县| 西乡县| 梓潼县| 奉新县| 互助| 获嘉县| 潮安县| 浦东新区| 丰都县| 堆龙德庆县| 清丰县| 武夷山市| 玉山县| 藁城市| 抚远县| 华容县| 始兴县| 上虞市| 和平区| 凯里市| 美姑县| 柳河县| 合阳县| 社会| 塔河县| 芜湖市| 莱州市| 台州市| 吉木乃县| 高尔夫|