解答: console.log()是
同步任務(便可以當即執行的任務),setTimeout是異步
任務(不會當即執行的事件任務)。瀏覽器
常見的異步操做:異步
異步任務分爲宏任務和微任務:函數
宏任務:script
(全局任務), setTimeout
, setInterval
, setImmediate
, I/O
, UI rendering
spa
微任務:process.nextTick
, Promise.then()
, Object.observe
, MutationObserver
3d
因此,對以上的解析是:日誌
1
,setTimeout
,交給異步處理模塊,咱們暫且先記爲 setTimeout1
,setTimeout
,交給異步處理模塊,咱們暫且先記爲 setTimeout2
,4
,setTimeout1
的回調函數,由於定時器的等待時間爲 0
秒,因此會直接輸出 2
,可是 W3C
在 HTML
標準中規定,規定要求 setTimeout
中低於 4ms
的時間間隔算爲 4ms
,setTimeout1
執行完時, setTimeout2
的等待時間並未結束,因此在 2秒
後打印日誌 3
,實際上並未等待2秒。解答:棧是先進後出code