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

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

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

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

問題描述

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

問題解答

回答1:

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

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

回答2:

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

回答3:

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

標(biāo)簽: JavaScript
主站蜘蛛池模板: 襄垣县| 土默特右旗| 筠连县| 富源县| 太仓市| 梅河口市| 长葛市| 晋州市| 凭祥市| 汉川市| 越西县| 洮南市| 阳江市| 宜君县| 临沭县| 乌什县| 慈溪市| 驻马店市| 温宿县| 隆林| 浑源县| 榆树市| 清水河县| 柘荣县| 滕州市| 铜鼓县| 开原市| 绥中县| 高阳县| 勐海县| 南丹县| 郓城县| 铜山县| 屯留县| 贵定县| 虞城县| 西盟| 米易县| 屏边| 张家界市| 景谷|