event loop详解
什么是event loop
- JS是单线程运行的
- 异步要基于回调来实现
- event loop 就是异步回调的实现原理
event loop是事件轮询,一直去回调队列里查询有没有可以执行的异步函数,有的话,就放回主线程的栈里执行
event loop的执行过程
js 如何执行
- 从前到后,一行一行执行
- 如果某一行执行报错,则停止下面代码的执行
- 先把同步代码执行完,再执行异步
console.log('Hi')
setTimeout(function cb1(){
console.log('cb1')
},5000)
console.log('Bye')
同步代码放栈call stack里执行
遇到异步,先记录下来web apis,时机到了/执行完放回调队列callback queue
所有同步运行完,浏览器启用事件轮询event loop,去回调队列callback queue查询异步队列有没有可以执行的函数,一直轮询查找
DOM事件和event loop的关系
- DOM事件也使用回调,基于event loop,什么时候用户点击了(时机),就会把返回函数放回调队列callback queue里,事件轮询event loop查找,执行
- DOM事件使用回调,基于不是event loop ,但不是异步