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是宏任务所以最后执行