执行过程
- 普通的js代码是单线程同步执行的,从上到下的顺序。
- 遇到异步代码,把异步代码交到其他线程处理,继续同步指定后续的单线程代码。
- 异步代码分为宏任务和微任务,分别进入各自的等待队列。
- 主线程代码执行完,开始检索执行微任务等待队列,完事检索执行宏任务等待队列。
- 微任务宏任务都执行完,主线查询还有没有没执行的任务,给提到主线程上来执行。
常见微任务
- process.nextTick
- Promise
- MutationObserver
- Object.observe
常见宏任务
- setTimeout
- setInterval
- setImmediate
- IO
- UI渲染
- postMessage
名词术语
- 宏任务:每次执行栈执行的代码就是一个宏任务。
- 微任务:当前任务任务执行结束立即执行的任务。