解答: 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