eventloop

93 阅读1分钟

eventloop

一、eventloop是什么:

Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。

二、为什么会有event loop:

因为js是单线程的,如果某段程序需要等待一会再执行,后面的程序都会被阻塞,这样也就带来了一些问题。为了解决这个问题,js出现了同步和异步两种任务,两种任务的差异就在于执行的优先级不同。event loop就是对任务的 执行顺序做了详细的规范。

三、同步和异步任务:

​ 异步任务:异步任务分为宏任务和微任务。 常见的微任务有:Promise.then(),.then中的逻辑是微任务;process.nextTick(node环境)。 常见的宏任务有:setTimeout、setInterval、setImmediate(node环境)、xhr(发送网络请求),callback。 同步任务:除了上面的这些情况,都属于同步任务。

四、任务的执行顺序:

​ 先到后:同步任务 -> 微任务 -> 宏任务。

五、任务在哪里执行:

​ 无论是同步任务还是异步任务,都是在主线程执行。

六、下面来看一道题目来更好的理解event loop

setTimeout(()=>{console.log(6)},2000)    // 任务a
setTimeout(()=>{console.log(4)})     // 任务 b
setTimeout(()=>{console.log(5)})     // 任务 c

new Promise((rel)=>{              
console.log(1)                         // 任务 d
rel(3)                            
})
.then((res)=>{console.log(res)})     // 任务 e

console.log(2)                    // 任务 f

// 打印结果:1,2,3,4,5,6

1和2二是同步任务,.then是微任务,所以执行3,setTimeout是宏任务所以最后执行