//Event-Loop
/**
* 执行环境会被顺序的加入到执行栈中。如果遇到异步的代码,
* 会被挂起并加入到 Task(有多种 task) 队列中。
* 一旦执行栈为空,Event Loop 就会从 Task 队列中拿出需要执行的代码并放入执行栈中执行
*
*
* Task队列:Jobs(microtask) Task(macrotask)
* 微任务包括 process.nextTick ,promise ,Object.observe ,MutationObserver
* 宏任务包括 script , setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering
*
*
*
*
* 所以正确的一次 Event loop 顺序是这样的
* 执行同步代码,这属于宏任务
* 执行栈为空,查询是否有微任务需要执行
* 执行所有微任务
* 必要的话渲染 UI
* 然后开始下一轮 Event loop,执行宏任务中的异步代码
*/
console.log('script start')
async function async1() {
await async2()
console.log('async1 end')
}
async function async2() {
console.log('async2 end')
}
async1()
console.log('script end')