macro-task(宏任务):包括整体代码script,setTimeout,setInterval
micro-task(微任务):Promise,process.nextTick
不同类型的任务会进入不同的Event Queue,有宏任务的队列和微任务的队列。
事件循环的顺序,决定js代码的执行顺序。进入整体代码(宏任务)后,开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务
整段代码作为宏任务进入主线程
遇到settimeout,将其回调函数注册后分发到宏任务Event Queue。
遇到了Promise,new Promise立即执行,then函数分发到微任务Event Queue
遇到console.log(),立即执行
第一个宏任务执行结束,看看有什么微任务,发现有then,执行
第二轮循环,发现宏任务settimeout的回调函数,执行。
结束。