浅聊事件循环Eventloop

本文深入探讨JavaScript的单线程特性以及同步和异步任务的执行方式。通过解析宏任务和微任务的区分,阐述了事件循环(Event Loop)的工作原理,帮助理解如何避免阻塞主线程并确保代码流畅运行。重点介绍了Promise、回调函数、定时器等在事件循环中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js为单线程语言,js的代码ke分为同步任务和异步任务,为解决异步任务导致的阻塞等待问题,js采用了事件循环机制。

一、什么是同步任务、异步任务?

同步任务:在主线程上,排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。

异步任务:不进入主线程,而进入任务队列的任务,只有‘任务队列’通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

二、什么是宏任务和微任务?

异步任务又细分为宏任务和微任务。

宏任务:ajax请求回调函数,读写文件回调函数,定时器回调函数,事件处理函数等,script中的代码块,都属于宏任务。(script(整体代码),setTimeout,setInterval,setImmediate,I/O,ui rendering)

微任务:promise对象.then的回调函数,promise.nextclick等,都属于微任务。(process.nextTick, Promise,MutationObserver)

注意:一个宏任务中的同步任务执行完后,会先看有没有相关的微任务,若有,会先执行完所有微任务,再执行下一个宏任务。

三、什么是事件循环?

1、所有同步任务都在主线程上执行,形成一个执行栈。异步任务放在宿主环境进行执行,执行完的异步任务放在任务队列中。

2、当主线程中的执行栈为空时,检查事件队列是否为空,如果为空,则继续检查,如不为空,则取出任务队列的首部,加入执行栈。

3、执行任务。

4、检查执行栈,如果执行栈为空,则继续从任务队列中读取异步任务的回调函数,放到执行栈中依次执行,这个不断循环的过程,就被称之Eventloop(事件循环)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值