Event Loop 事件循环机制 执行顺序

JavaScript中 分为 同步任务 异步任务(宏任务 微任务)

同步任务  

在 JavaScript 中,同步任务指的是那些在主线程上按顺序直接执行的任务,不需要等待其他任务完成即可立即执行。同步任务的特点是阻塞式的,即一个任务没有执行完成之前,后面的代码不会执行。

常见的同步任务

普通函数调用 普通的函数调用是同步的,函数内部的代码会按照书写顺序依次执行。

表达式和语句 算术运算、赋值、条件判断(if/else)、循环(for/while)等基本的表达式和语句都是同步执行的。

DOM 操作 直接操作 DOM(Document Object Model)的代码,如修改元素属性、添加或删除节点等,通常也是同步的。

字符串和数组方法 大多数字符串和数组的内置方法,如 push(), pop(), slice(), indexOf(), split(), join() 等,都是同步执行的。

Math 和 Date 方法 数学和日期对象的大部分方法,如 Math.random(), Math.floor(), Date.now() 等,都是同步执行的。

读取和设置变量 读取和设置变量的值是同步的,这意味着变量的读写操作会立即反映出来。

立即执行函数表达式 立即执行的函数表达式会在定义时立即执行,其内部的代码也是同步执行的。

模板字符串 ES6 引入的模板字符串是同步执行的,用于字符串拼接和插值。

异步任务

异步任务是指那些不会立即执行,而是被安排在稍后的时间点执行的任务。异步任务的设计是为了避免阻塞主线程,提高程序的响应性和效率

常见的异步任务

宏任务 (宏任务(Macro-tasks)指的是那些在单次事件循环中能够独立完成的任务。每个宏任务完成后,事件循环会检查微任务队列并执行所有微任务,然后再继续下一个宏任务)

setTimeoutsetInterval 定时器任务,其中 setTimeout 会在设定的延迟时间后执行一次,而 setInterval 则会每隔设定的时间间隔重复执行。

setImmediate:在 Node.js 环境中,setImmediate 会在当前事件循环结束时执行,它比 setTimeout 优先级高,但仍然属于宏任务。

process.nextTick:虽然 process.nextTick 在 Node.js 中的行为类似于微任务,但它实际上是独立于事件循环的一个特殊宏任务,且优先级高于其他宏任务。

微任务 (微任务(Microtasks)是在每次宏任务执行完毕后立即处理的任务。这意味着在执行下一个宏任务之前,所有排队的微任务都会被处理完毕)

Promise 回调 当 Promise 对象的状态从 pending 变为 resolved 或 rejected 时,其相关的回调函数会被加入到微任务队列中等待执行。

async/await 结构中的 await 表达式  在 async 函数内部使用 await 关键字等待一个 Promise,当 Promise 完成时,async 函数体内的后续代码将作为微任务执行。

同步任务首先执行,接着是微任务(由Promise的.then,async/await方法产生的),最后是宏任务(由setTimeout,setInterval产生的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑源龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值