js中eventLoop的总结归纳。
eventLoop众所周知是事件循环的意思。首先我们来说说他的定义。在js中,我们知道会有同步、异步的这个说法。在执行时候我们的同步任务会生成一个同步任务队列,在同步任务执行执行中遇到异步的操作那么把异步任务存储到一个任务队列中。在同步任务结束之后我们会把所有异步任务队列中可以执行的任务一一执行掉。总的来说总结如下
(1):所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2):主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3):一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
在任务队列中又分为宏任务macro task和微任务micro task。我们可以这样理解,任务队列会一分为二,微任务队列。和宏任务队列。在同步任务执行完成之后,首先回去微任务队列中去看看是否有需要执行的任务,有执行,没有再去看宏任务队列中的任务。总结如下
1:异步任务队列中分为macro task和miscro task。
2:miscro task 先于macro task执行。
那么我们在日常开发中有哪些常见的macro task 和miscro task呐?
mascro task:setTimeout、setInterval、setImmediate、其中setImmediate又会优先于其他两个执行。是由于其他两个会有有4毫秒的延迟。
miscro task:Promise。以下是个例子供大家测试。
setImmediate(function () { console.log('1'); }); setTimeout(function () { console.log('2'); }, 0); Promise.resolve(2).then(() => { console.log(666) })