编辑代码

//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')