在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ setTimeout最小間隔4ms的問(wèn)題

setTimeout最小間隔4ms的問(wèn)題

setTimeout(()=>{console.log(5)},5)
setTimeout(()=>{console.log(4)},4)
setTimeout(()=>{console.log(3)},3)
setTimeout(()=>{console.log(2)},2)
setTimeout(()=>{console.log(1)},1)
setTimeout(()=>{console.log(0)},0)

為什么輸出1,0,2,3,4,5,不是說(shuō)setTimeout最小間隔4ms嗎?
運(yùn)行環(huán)境Chrome/Safari
在Firefox下為0,1,2,3,4,5

回答
編輯回答
假灑脫
setTimeout和setInterval的運(yùn)行機(jī)制是,將指定的代碼移出本次執(zhí)行,等到下一輪Event Loop時(shí),再檢查是否到了指定時(shí)間。如果到了,就執(zhí)行對(duì)應(yīng)的代碼;如果不到,就等到再下一輪Event Loop時(shí)重新判斷。這意味著,setTimeout指定的代碼,必須等到本次執(zhí)行的所有代碼都執(zhí)行完,才會(huì)執(zhí)行。

執(zhí)行完setTimeout(()=>{console.log(1)},1)的時(shí)候一個(gè)毫秒已經(jīng)過(guò)去了, 而且console.log(1)已經(jīng)先進(jìn)入了事件循環(huán)中, 于是就console.log()`

參考:setTimeout運(yùn)行機(jī)制

2018年3月28日 02:22
編輯回答
兮顏

setTimeout的第二個(gè)參數(shù),不得低于4毫秒,如果低于這個(gè)值,就會(huì)自動(dòng)增加,根據(jù)瀏覽器和當(dāng)前環(huán)境不同,最低時(shí)間間隔也不一樣,瀏覽器執(zhí)行的順序應(yīng)該和瀏覽器當(dāng)前狀態(tài)有關(guān)系,我在firebox執(zhí)行的結(jié)果是0 1 5 4 3 2

2017年9月7日 10:21
編輯回答
夏夕

復(fù)現(xiàn)樓主問(wèn)題:

  setTimeout(()=>{console.log(5)},5)
  setTimeout(()=>{console.log(4)},4)
  setTimeout(()=>{console.log(3)},3)
  setTimeout(()=>{console.log(2)},2)
  setTimeout(()=>{console.log(1)},1)
  setTimeout(()=>{console.log(0)},0)

打印的日志:
圖片描述

下面是補(bǔ)充點(diǎn)我自己發(fā)現(xiàn)的信息

  setTimeout(()=>{console.log(5)},5)
  setTimeout(()=>{console.log(4)},4)
  setTimeout(()=>{console.log(3)},3)
  setTimeout(()=>{console.log(2)},2)
  setTimeout(()=>{console.log(0)},0)
  setTimeout(()=>{console.log(1)},1)

當(dāng)是這種順序的時(shí)候,chrome和safari倆個(gè)瀏覽器下會(huì)打印
圖片描述

2017年8月19日 23:55
編輯回答
絯孑氣
// https://github.com/nodejs/node/blob/v8.9.4/lib/timers.js#L456

if (!(after >= 1 && after <= TIMEOUT_MAX))
  after = 1; // schedule on next tick, follows browser behavior

設(shè)置最低1ms的行為是為了向?yàn)g覽器行為看齊。

雖然有4ms的限制,但是是存在條件的.詳見MDN英文文檔

clipboard.png

2017年4月23日 21:09