ajax请求是宏任务吗,一次搞懂-JS事件循环之宏任务和微任务

本文深入探讨JavaScript中的事件循环机制,包括宏任务(Macro-task)如setTimeout和脚本执行,以及微任务(Micro-task)如Promise。通过实例解析执行顺序,帮助理解异步任务如何在单线程环境中协调执行。
摘要由CSDN通过智能技术生成

众所周知,JS 是一门单线程语言,可是浏览器又能很好的处理异步请求,那么到底是为什么呢?

JS 的执行环境一般是浏览器和 Node.js,两者稍有不同,这里只讨论浏览器环境下的情况。

JS 执行过程中会产生两种任务,分别是:同步任务和异步任务。同步任务:比如声明语句、for、赋值等,读取后依据从上到下从左到右,立即执行。

异步任务:比如 ajax 网络请求,setTimeout 定时函数等都属于异步任务。异步任务会通过任务队列(Event Queue)的机制(先进先出的机制)来进行协调。

任务队列(Event Queue)

任务队列中的任务也分为两种,分别是:宏任务(Macro-take)和微任务(Micro-take)宏任务主要包括:scrip(JS 整体代码)、setTimeout、setInterval、setImmediate、I/O、UI 交互

微任务主要包括:Promise(重点关注)、process.nextTick(Node.js)、MutaionObserver

任务队列的执行过程是:先执行一个宏任务,执行过程中如果产出新的宏/微任务,就将他们推入相应的任务队列,之后在执行一队微任务,之后再执行宏任务,如此循环。以上不断重复的过程就叫做 Event Loop(事件循环)。

每一次的循环操作被称为tick。

1460000039971922

理解微任务和宏任务的执行执行过程console.log("script start");

setTimeout(function () {

console.log("setTimeout");

}, 0);

Promise.resolve()

.then(function () {

console.log("promise1");

})

.then(function () {

console.log("promise2");

});

console.log("script end");

按照上面的内容,分析执行步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值