JavaScript 代码的执行主要依赖于 JavaScript 引擎,其执行流程大致如下:
代码转换
JS 引擎首先将 JavaScript 代码转换为一个个的 Token,这些 Token 包括关键字、运算符、文字和标识符等不可再拆分的小单位。
构建抽象语法树(AST)
JS 引擎使用这些 Token 创建一个抽象语法树(AST),该树表示了代码的语法结构。
即时编译(JIT)
现代 JS 引擎(例如 V8,用于 Chrome 和 Node.js)采用即时编译技术,在运行时将 JS 代码编译为机器代码。
执行代码
JS 引擎最初会直接从 AST 解释 JS 代码,然后将其转为字节码,最后由 JS 虚拟机(JVM)来执行。
JavaScript 的执行顺序
JavaScript 的执行顺序基于事件循环(Event Loop)机制,主要分为同步任务和异步任务,而异步任务又进一步分为宏任务(Macro Task)和微任务(Micro Task)。
同步任务
直接按代码顺序执行,位于主线程中。
微任务
优先级较高,通常包括:`Promise.then/catch/finally`、`MutationObserver`队列中的任务等。
宏任务
优先级较低,通常包括:`setTimeout`、`setInterval`、`setImmediate`(在 Node.js 中)、I/O 操作、UI 渲染等。
执行顺序的具体流程如下:
执行栈中的同步任务依次执行。
如果遇到异步任务,将其分类到对应的任务队列(微任务队列或宏任务队列)。
当前同步任务完成后,清空微任务队列。
微任务队列清空后,再执行宏任务队列中的第一个任务。
重复上述步骤,直到所有任务完成。
运行 JavaScript 的方法
在浏览器中运行
可以通过浏览器的开发者工具(例如 Chrome 的 DevTools)的控制台直接输入并执行 JavaScript 代码。
将 JavaScript 代码写入 HTML 文件的 `