2024啦都,Javascript到底是编译型语言or解释型语言?

Begin

一般来说,JavaScript 被归类为动态语言或解释语言。对于这个事实,存在着很多误解。我们需要询问并找到答案。

  • 说 JavaScript 是一种解释性语言是否完全公平?

  • 解释器和编译器有什么区别?

概念

我们看维基百科怎么说:

编译器(compiler)是一种计算机程序,它会将某种编程语言写成的源代码(原始语言)转换成另一种编程语言(目标语言)。

🐕🐕🐕🐕🐕🐕🐕🐕🐕🐕🐕🐕🐕🐕🐕

解释器(interpreter),是一种计算机程序,能够把解释型语言解释执行。解释器就像一位"中间人"。解释器边解释边执行,因此依赖于解释器的程序运行速度比较缓慢。解释器的好处是它不需要重新编译整个程序,从而减轻了每次程序更新后编译的负担。相对的编译器一次性将所有源代码编译成二进制文件,执行时无需依赖编译器或其他额外的程序。

🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱

首先要了解的是,计算机并不直接理解编程语言。每种编程语言都有自己的语法、文法和结构。无论使用什么编程语言(JavaScript、Python、Java 等)编写代码,都必须将其翻译成机器(计算机)可以理解的内容。

🐇🐇🐇🐇🐇🐇🐇🐇🐇🐇🐇🐇🐇🐇🐇

这里最重要的事实是,JavaScript 源代码如何经历成为机器可理解语言的旅程?JavaScript 引擎执行典型编译器在编译源代码时执行的许多步骤(事实上,更简洁和复杂的方式)。

执行前的阶段

标记化: 将源代码字符串分解为有意义的块,称为 Tokens 。例如源代码varage = 7;可以标记为 var、age、=、7 和 ;

解析: 解析是一种将令牌数组作为输入并将其转换为编程语言语法可以理解的嵌套元素树的方法。这棵树称为抽象语法树(AST)。

代码生成: 在此阶段,AST 用作输入,并生成可执行代码运行的环境(或平台)可以理解的可执行字节码。然后,可执行字节码由优化的 JIT(即时)编译器进一步细化/转换。

您可以使用 AST Explorer 工具查看您编写的代码如何解析为抽象语法树 (AST)。

总而言之

总而言之,JavaScript 代码确实被编译了。它更接近于编译而不是解释。每次都会编译。下次,如果有人问这个问题,JavaScript 真的可以编译吗?答案是肯定的。compilation 进程生成二进制字节代码后, JS virtual machine 执行它。

与 Java 等其他编程语言不同,编译不会在构建时进行。上述三个阶段并不是编译 JavaScript 源代码时发生的唯一事情。JavaScript 引擎需要执行大量优化步骤来解决性能问题。

声明一下,JS 是一种解释型语言,但是也可以进行编译。

相关推荐
哀木1 小时前
一个简单的套壳方案,就能让你的 Agent 少做重复初始化
前端
问心无愧05131 小时前
ctf show web入门27
前端
小村儿1 小时前
给 AI Agent 装上"长期记忆":Karpathy 的 LLM Wiki 思想,我做成了工具
前端·后端·ai编程
竹林8181 小时前
用ethers.js连接MetaMask实现Web3钱包登录:从踩坑到稳定运行的完整记录
前端·javascript
heyCHEEMS1 小时前
如何用 Recast 实现静态配置文件源码级读写
前端·node.js
心连欣1 小时前
从零开始,学习所有指令!
前端·javascript·vue.js
review445432 小时前
大模型和function calling分别是如何工作的
前端
东东同学2 小时前
耗时一个月,我把 Nuxt 首屏性能排障经验做成了一个 AI Skill
前端·agent
青山师2 小时前
动态代理深度解析:JDK与CGLIB底层实现与实战
java·设计模式·面试·动态代理·java面试·cglib
冴羽3 小时前
超越 Vibe Coding —— AI 辅助编程指南
前端·ai编程·vibecoding