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 是一种解释型语言,但是也可以进行编译。

相关推荐
树上有只程序猿10 分钟前
后端思维之高并发处理方案
前端
uhakadotcom10 分钟前
Ruff:Python 代码分析工具的新选择
后端·面试·github
uhakadotcom14 分钟前
Mypy入门:Python静态类型检查工具
后端·面试·github
庸俗今天不摸鱼1 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
QTX187301 小时前
JavaScript 中的原型链与继承
开发语言·javascript·原型模式
黄毛火烧雪下1 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox1 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞1 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行1 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_593758101 小时前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox