JavaScript代码执行原理

本文详细阐述了JavaScript代码如何从HTML解析器的字节流开始,经过预解析器、解析器生成抽象语法树,转化为字节码,最后通过优化编译器生成机器码的过程。特别强调了Node.js和Chromium浏览器使用的V8引擎的工作机制。

JavaScript代码是如何被机器理解并执行的呢?
作为 JavaScript  开发者,通常我们不需要关心JavaScript引擎是如何执行代码的。但是,了解 JavaScript 引擎的工作原理,知晓它如何处理我们编写的 JS  代码、肯定是有益的。
注意:这篇文章讲述的原理,基于 Node.js 和 Chromium 的浏览器所使用的 V8 引擎。

HTML 解析器遇到script标签时,会从网络、缓存中以字节流的方式加载代码。此阶段,字节流解码器会负责将字节转为代码字符。
例如,字节流中的 0066  解码为 f,0075 解码为 u,006e 解码为 n,0063 解码为 c,0074 解码为 t,0069 解码为 i,006f 解码为  o,006e 解码为 n。结合起来便是: function! JavaScript  中的一个函数关键字,这时会将它做为JavaScript代码,并创建一个标记并发送给JS引擎。

JS引擎使用两个解析器:预解析器和解析器。为了减少加载网页所需的时间,引擎会尽量避免立即解析不必要的代码。预解析器处理可能稍后会使用的代码,而解析器则处理立即需要的代码!

如果某个函数只有在用户点击按钮后才会被调用,那么不必要立即编译这段代。如果用户最终点击了按钮并需要那段代码,它才会被发送到解析器。

解析器根据从字节流解码器接收到的代码创建节点:创建一个抽象语法树(AST)。
接下来,轮到解释器了!解释器遍历 AST,并根据 AST 包含的信息生成字节码。
一旦字节码完全生成,AST 就会被删除,从而释放内存空间。字节码已经是机器可以识别和处理的东西!

字节码速度很快。
但还可以更快。当字节码运行时,它可以检测某些行为是否经常发生,比如你多次调用一个函数:这时便可优化它,让它运行得更快:字节码与行为反馈数据一起被发送到优化编译器。优化编译器接从这些信息中生成高度优化过的字节码:机器码。

总结而言,JS代码变为机器可识别的整个过程是:
字节流 → JavaScript代码 → 抽象语法树(AST) → 字节码 → 机器码。

文章来源:JS执行原理JS执行原理,JavaScript代码是如何被机器理解并执行的呢?icon-default.png?t=N7T8https://www.fairysoftware.com/tips/202403240001.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值