主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。
用两个队列来处理异步任务。 以setTimeout为代表的任务放到被称为macrotask,放到Macrotask queue中, 而以Promise 为代表的任务放到Microtask queue中。 eventloop对这两个队列的处理逻辑也不一样。
执行过程如下: JavaScript引擎首先从macrotask queue中取出第一个任务, 执行完毕后,将microtask queue中的所有任务取出,按顺序全部执行(全部执行不仅指开始执行时队 列里的microtask,在这一步执行过程中产生的新的microtask,也要在这里执行) 然后再从macrotask queue中取下一个, 执行完毕后,再次将microtask queue中的全部取出; 循环往复,直到两个queue中的任务都取完。 换句话说,一次eventloop循环会处理一个macrotask和所有这次循环中产生的microtask
Promise定义时传入的函数什么时候执行的? 定义时的函数称为 执行器函数, 它是同步的,会立即执行