>JavaScript 引擎会常驻于内存中,等待着宿主将 JavaScript 代码或者函数传递给它执行。 在 ES3 和更早的版本中,JavaScript 本身还没有异步执行代码的能力,在 ES5 之后,JavaScript 引入了 Promise,这样不需要浏览器的安排,引擎本身也可以发起任务了。 采纳 JSC 引擎的术语,把宿主发起的任务称为**宏观任务**,将引擎发起的任务称作**微观任务** 用伪代码表示事件循环大概如下: ```javascript while(true) { r = wait(); execute(r); } ``` 其中每次的循环过程,其实就是一个宏观任务,大致可以理解为宏观任务的队列就相当于事件循环。在宏观任务中,JavaScript 的 Promise 还会产生异步代码,JavaScript 必须保证这些异步代码在一个宏观任务中完成,因此,每个宏观任务中又包含了一个微观任务队列