鍍金池/ 問(wèn)答/HTML5  HTML/ js定時(shí)器異步問(wèn)題

js定時(shí)器異步問(wèn)題

圖片描述

圖片描述

定時(shí)器設(shè)置成0秒為什么不是立即執(zhí)行呢,為什么執(zhí)行結(jié)果是1 3 2呢?是因?yàn)槎〞r(shí)器是異步的,所以js不會(huì)先執(zhí)行嗎?感謝各位大佬解答!

回答
編輯回答
逗婦惱

event loop了解一下?

2018年5月2日 19:29
編輯回答
神經(jīng)質(zhì)

setInterval() 使得匿名函數(shù)進(jìn)入事件隊(duì)列,會(huì)在js引擎“有空”的時(shí)候執(zhí)行,執(zhí)行間隔每0s一次(相當(dāng)于只要“有空”就執(zhí)行)
一開(kāi)始打印1沒(méi)問(wèn)題,然后把打印2的函數(shù)添加進(jìn)事件隊(duì)列,然后發(fā)現(xiàn)還要打印3并沒(méi)有空,就先去打印3,然后沒(méi)事干了有空了,就瘋狂打印2222222。

event loop 了解一下

2018年7月5日 15:24
編輯回答
焚音

setTimeout() 和 setInterval() 都有延遲,不存在0秒延時(shí),最小延時(shí)4ms。

2018年2月27日 11:11
編輯回答
妖妖

簡(jiǎn)單粗略易懂的解釋一下,一般for循環(huán) 處理dom節(jié)點(diǎn) num++這種運(yùn)算啊 此類的操作都是同步操作
同步操作有什么特點(diǎn)?就是從上到下依次執(zhí)行 比如console.log(1) console.log(2) 先顯示1后顯示
2

請(qǐng)求ajax 給某個(gè)按鈕添加一個(gè)事件比如點(diǎn)擊,點(diǎn)擊按鈕就alert隨便一個(gè)數(shù)字 setTimeout這種被稱為異步操作
記住一個(gè)結(jié)論就好了所有同步代碼執(zhí)行完畢才會(huì)執(zhí)行異步代碼
也就是你的定時(shí)器不管延遲多少時(shí)間,也要等到同步代碼都執(zhí)行完畢之后才會(huì)執(zhí)行

console.log(1);

btn.onclick = function() {
    console.log('click me')
}

console.log(4);

setTimeout(function() {
  console.log(3)
},0)
2017年1月25日 20:26
編輯回答
怣痛

這么理解,定時(shí)函數(shù)事件函數(shù)異步回調(diào)是在js事件隊(duì)列里面,也就是說(shuō)當(dāng)js主線程空出來(lái)的時(shí)候才會(huì)按照先后順序去執(zhí)行這三類函數(shù)。你設(shè)置0秒,但是定時(shí)函數(shù)還是在事件隊(duì)列里面,所以答案是那樣的.話說(shuō)你為啥不setTimeout,看你都輸出多少個(gè)2了?

2018年4月23日 09:15