什么是EventLoop? && 怎么理解EventLoop?

EventLoop是JavaScript的单线程运行机制,它将同步任务和异步任务分开处理,避免阻塞。当同步任务执行完后,会检查微任务队列,然后是宏任务队列。宏任务包括script、setTimeout等,微任务如Promise.then、MutationObserver。这种机制确保了代码的流畅执行。
摘要由CSDN通过智能技术生成

1. EventLoop又叫事件循环,是单线程语言JS在运行代码时不被阻塞的一种运行机制

2. JS代码的执行分为同步代码和异步代码。

当碰到同步代码时直接在执行栈中执行,当碰到异步代码并且时机符合时,就会把对应异步代码添加到任务队列中。

当执行栈中的同步代码执行完毕后,就会去任务队列中把异步代码拿到执行栈中执行。

这种反复轮训任务队列并把异步代码拿到执行栈中执行的操作,就是事件循环(EventLoop)

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

Javascript单线程任务被分为同步任务异步任务,同步任务会在调用栈中按照顺序等待主线程依次执行,异步任务会在异步任务有了结果后,将注册的回调函数放入任务队列中等待主线程空闲的时候(调用栈被清空),被读取到栈内等待主线程的执行。

setTimeout(() => {     
  // 这个回调一定是 1s 执行吗?不一定,取决于执行栈中的同步代码的执行事件有没有超过 1s     console.log(3) 
}, 1000) 
while(true) {}  
// 怎么保证那个时间就是准确的呢?
// web worker => 开启多线程 => 把耗时的操作放到另外一个线程

任务队列又分为宏任务(task) 和 微任务(microtask)

1.宏任务与微任务都是异步任务,都是在同一个任务队列中,主要区别在于它们的执行顺序。

2.在异步任务队列下 ,又分为宏任务队列与微任务队列。

事件循环流程(EventLoop流程)

  1.   先解析默认script宏任务,进入第一个宏任务
  2.   判断代码是同步还是异步
  3.   如果是同步,立即执行
  4.   如果是异步,就会放入异步队列,微任务放入微任务队列,宏任务就放入宏任务队列
  5.   当前队列所有的同步都执行完毕之后,开始执行异步
  6.   先执行微任务,再执行宏任务.完成本次事件循环

怎么判断哪些是宏任务?哪些是微任务 

(1) 宏任务

script(整体代码)
 setTimeout
 setInterval
 http回调
 I/O
 UI交互事件(事件回调)
 postMessage
 MessageChannel
 setImmediate(Node.js 环境)

(2)微任务

Promise.then

Object.observe

MutationObserver

process.nextTick(Node.js 环境)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值