宏任务和微任务 常见的微任务和宏任务 事件循环机制 同步异步

本文介绍了JavaScript中的同步异步概念,重点讲解了事件循环机制,包括宏任务队列和微任务队列的工作原理。文章还列举了常见的宏任务(如script、setTimeout)和微任务(如Promise回调、process.nextTick)类型,并强调了微任务在事件循环中的优先执行顺序。
摘要由CSDN通过智能技术生成


先了解同步异步


在了解什么时宏任务队列和微任务队列之前,我们先了解一下什么是同步和异步。
● 同步指的是当一个进程在执行某个请求时,如果这个请求需要等待一段时间才能返回,那么这个进程会一直等待下去,直到消息返回为止再继续向下执行。
● 异步指的是当一个进程在执行某个请求时,如果这个请求需要等待一段时间才能返回,这个时候进程会继续往下执行,不会阻塞等待消息的返回,当消息返回时系统再通知进程进行处理。

事件循环机制


因为 js 是单线程运行的,在代码执行时,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行。在执行同步代码时,如果遇到异步事件,js 引擎并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。当异步事件执行完毕后,再将异步事件对应的回调加入到一个任务队列中等待执行。任务队列可以分为宏任务队列和微任务队列,当当前执行栈中的事件执行完毕后,js 引擎首先会判断微任务队列中是否有任务可以执行,如果有就将微任务队首的事件压入栈中执行。当微任务队列中的任务都执行完成后再去执行宏任务队列中的任务。

JS引擎常驻于内存中,等待宿主将JS代码或函数传递给它。
也就是等待宿主环境分配宏观任务,反复等待 - 执行即为事件循环。

Event Loop中,每一次循环称为tick,每一次tick的任务如下:

1.执

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript事件循环(Event Loop)是 JavaScript 运行机制中的核心部分,负责处理异步操作和线程调度。它是 JavaScript 中实现非阻塞I/O和响应用户交互的关键。 **异步/同步:** - **同步**(Synchronous):代码按照顺序执行,每个任务完成后才会执行下一个任务。如果某个任务耗时较长,将导致整个程序暂停直到该任务完成。 - **异步**(Asynchronous):代码执行不会被阻塞,当遇到异步任务(如定时器、网络请求或读取文件)时,JavaScript会继续执行后续的同步代码,而把异步任务放到后台等待处理,完成后通过回调、Promise 或 async/await 结合事件循环来通知主线程。 **宏任务/微任务:** - **宏任务(Macrotask)**:指的是那些浏览器可以感知到的任务,比如脚本执行、UI渲染、DOM操作、setTimeout 和 setInterval 回调等。每次事件循环开始,都会先执行所有已排队的宏任务。 - **微任务(Microtask)**:微任务宏任务优先级高,它们通常是在某些特定情况下生成的,例如 Promise 的 resolve 或 reject 时、MutationObserver 观察到 DOM 变化时、process.nextTick() 执行的内容。每当宏任务执行完毕,立即执行所有的微任务。 简而言之,事件循环的工作流程大致如下: 1. 执行当前同步代码块。 2. 如果有微任务,立即执行微任务。 3. 宏任务队列中如果有任务,执行宏任务。 4. 完成当前宏任务后,再次检查是否有微任务并执行。 5. 重复步骤3和4,直到没有更多任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值