0

0

javascript如何工作_它的引擎执行流程是怎样的?

幻影之瞳

幻影之瞳

发布时间:2026-01-10 20:53:07

|

309人浏览过

|

来源于php中文网

原创

javascript有严格编译执行流程:先词法分析和语法解析生成ast,再初始化词法/变量环境形成作用域链,接着ignition字节码与turbofan jit优化,最后由宿主事件循环调度宏微任务。

javascript如何工作_它的引擎执行流程是怎样的?

JavaScript 不是“边写边执行”的脚本语言,它有一套严格的编译与执行流程,理解这个流程能帮你解释 hoistingReferenceError、闭包生命周期等常见困惑。

引擎启动时先做词法分析和语法解析

V8(Chrome/Node)、SpiderMonkey(Firefox)等引擎一拿到 JS 代码,立刻进行两阶段静态处理:

  • 词法分析(Lexing):把源码切分成 token,比如 functionconst{myVar123
  • 语法解析(Parsing):用 token 构建抽象语法树(AST),例如 const x = 1 + 2 会生成含 VariableDeclarationBinaryExpression 节点的树

如果这一步出错,你会看到 SyntaxError: Unexpected token '}' 这类错误 —— 它发生在任何代码执行前,连 console.log 都不会触发。

执行前必须完成变量环境与词法环境的初始化

函数调用时,引擎为该执行上下文创建两个关键结构:

立即学习Java免费学习笔记(深入)”;

  • LexicalEnvironment:存放 let/const 声明,初始值为 uninitialized(访问即报 ReferenceError
  • VariableEnvironment:存放 var 和函数声明,会被提前初始化为 undefined(所以 var 有“变量提升”)
  • 二者都包含对父级环境的引用,构成作用域

这就是为什么这段代码不报错但输出 undefined

console.log(a); // undefined
var a = 1;

而这段直接崩溃:

Pixelfox AI
Pixelfox AI

多功能AI图像编辑工具

下载
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 2;

字节码与即时编译(JIT)不是可选优化,而是执行核心环节

V8 不直接解释 AST 或生成机器码,它走的是三段式路径:

  • AST → Ignition 字节码(轻量、内存友好,用于快速启动)
  • 运行中统计热点函数(如被调用超 100 次)→ 触发 TurboFan 编译为优化机器码
  • 若后续发现类型不稳定(比如某参数从 number 变成 string),则去优化(deoptimization),退回字节码执行

这意味着:typeofinstanceof、频繁的 try/catch 都可能阻碍 TurboFan 优化;而保持参数类型一致、避免在热函数里修改原型,能显著提升性能。

事件循环不是 JavaScript 引擎的一部分,而是宿主环境提供的调度机制

JS 引擎本身只管执行同步代码、管理调用与内存。真正决定“何时执行 setTimeout 回调”或“谁先拿到 Promise.then”的是宿主(浏览器或 Node.js)的事件循环实现:

  • 宏任务(macrotask):setTimeoutsetInterval、I/O、UI render
  • 微任务(microtask):Promise.thenMutationObserverqueueMicrotask
  • 每次宏任务执行完,引擎会清空全部微任务队列,再取下一个宏任务

所以这段代码输出顺序是 1 → 3 → 2

console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve().then(() => console.log(3));

注意:setTimeout(..., 0) 并不等于“立刻执行”,它只是尽快排进下一个宏任务队列 —— 实际延迟取决于当前调用栈是否为空、微任务是否已清空。

真正难调试的,往往不是语法错误,而是你误以为“代码按书写顺序执行”,却忽略了词法环境初始化时机、JIT 的去优化行为、或者事件循环中宏/微任务的嵌套层级。这些地方没日志、不报错,但逻辑就是不对。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1024

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

821

2023.11.06

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

930

2023.08.02

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6513

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

840

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1088

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1842

2024.03.01

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

557

2023.09.20

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号