- 前言:
Event Loop即时间循环,是指浏览器或Node的一种解决javascript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理
- Js运行机制
1、不同运行环境,js运行效果不一致
- 宏任务微任务
- 宏任务,macrotask也叫tasks。一些异步任务的回调会一次进入macro task queue,等待后续被继续调用,这些异步任务包括:
- setTimeout
- setInterval
- setImmwsiate(Node独有)
- I/O
- UI rendering(浏览器独有)
- 微任务,microtask,也叫jobs。另一些异步任务的回调会一次进入micro task queue,等待后续被调用,这些异步任务包括
- process.NextTick(Node独有)
- Promise.then()
- Object.observe
- MutationObserver
- (注:这里只针对浏览器和NodeJs)
- -----注意:new Promise()构造函数里面属于同步代码,而非微任务
- 浏览器端所有的宏任务都在一个事件队列里执行
,每次事件队列取出一个事件之时有微任务就把微任务执行完,然后才开始执行事件
- 宏任务每次只取一个
- 微任务执行多个
- 微任务会放在当前时间循环的末尾