js面试题 代码是如何执行的?执行的顺序是什么?
·
嗨,我是小路。今天主要和大家分享的主题是“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代码的执行过程。
都看到这里了,记得【点赞】+【关注】哟。
更多推荐
所有评论(0)