鍍金池/ 問答/HTML5  HTML/ js定時器異步問題

js定時器異步問題

圖片描述

圖片描述

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

回答
編輯回答
逗婦惱

event loop了解一下?

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

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

event loop 了解一下

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

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

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

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

請求ajax 給某個按鈕添加一個事件比如點擊,點擊按鈕就alert隨便一個數(shù)字 setTimeout這種被稱為異步操作
記住一個結(jié)論就好了所有同步代碼執(zhí)行完畢才會執(zhí)行異步代碼
也就是你的定時器不管延遲多少時間,也要等到同步代碼都執(zhí)行完畢之后才會執(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ù)異步回調(diào)是在js事件隊列里面,也就是說當js主線程空出來的時候才會按照先后順序去執(zhí)行這三類函數(shù)。你設(shè)置0秒,但是定時函數(shù)還是在事件隊列里面,所以答案是那樣的.話說你為啥不setTimeout,看你都輸出多少個2了?

2018年4月23日 09:15