嗨,我是小路。今天主要和大家分享的主题是“js代码是如何执行的?执行的顺序是什么?”。        js是单线程的,就是要任务一个一个串行执行。执行的顺序是先执行同步的,在执行异步脚本。异步脚本又区分为宏任务和微任务。微任务执行完成之后,再执行宏任务。整体运行顺序如下:同步脚本->异步脚本之微任务->异步脚本之宏任务。

1.同步脚本

有哪些:变量声明与赋值、运算操作、条件判断与循环、普通函数定义与调用、对象和数组操作、try-catch 错误处理、DOM 操作(基础)

2.异步脚本之宏任务

有哪些:具体宏任务如下:

注意:每一个宏任务执行完后,会去检查是否有待执行的微任务,并清空微任务队列,然后再执行下一个宏任务。

微任务执行完,再执行宏任务。

setTimeout 延迟执行的回调函数
setInterval 定时重复执行的回调
setImmediate(Node.js) 立即执行下一个宏任务阶段的回调
I/O 操作 如文件读写、网络请求的回调,ajax
UI 渲染(浏览器) 浏览器每帧的 UI 更新
script 标签中的整体代码 页面加载时执行的同步代码(初始宏任务)
requestAnimationFrame(浏览器) 动画帧回调,three.js 渲染时用的多

3.异步脚本之微任务

有哪些:以下是微观的任务列表

微任务类型 说明
Promise.then/catch/finally Promise 的回调函数(非 new Promise() 构造器中的同步代码)后面的then才是微任务
async/await await 后面的代码(本质上是 Promise 的语法糖);await后面的语法加入到微任务。
queueMicrotask() 显式将一个函数加入微任务队列。排在当前微任务末尾执行。
MutationObserver(浏览器) 监听 DOM 变化的回调
process.nextTick()(Node.js) 注意:虽然行为类似,但它在 Node.js 中优先级高于微任务,会在微任务之前执行

三、学习感悟

       js的执行顺序是先执行同步的脚本,再执行异步的脚步;异步的脚本又区分为宏任务脚本和微任务脚本。当微任务脚本执行完之后,再执行宏观的异步脚本。

        在实际代码中,需要抓住三个微任务的关键点(Promise.then)/catch/finally、aysnc/await(await后面的代码会加入到微任务)、process.nextTick()会放在微任务顶部执行。

        在抓住了微任务的关键点之后,就要掌握宏观任务的三个关键点:定时器(setTimeOut,setInteval)、O/I操作(读写文件、请求)、渲染(UI渲染和动画帧回调渲染)

抓住这几个关键点,就能更好的理解js代码的执行过程。

都看到这里了,记得【点赞】+【关注】哟。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐