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

相关推荐
CharlesYu019 小时前
前端性能优化的第一性原理,是不断缩短“用户发起意图 → 获得可用结果”之间的时间
前端
平头哥技术团队9 小时前
Day 21 _ 页内锚点_给每段起个 id,目录写 href=_#id_,点一下页面就滚到那一段
前端·html·html5
子兮曰10 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
人民广场吃泡面11 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
中科三方11 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
bug总结11 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言12 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
IT_陈寒12 小时前
Vue的computed属性竟然坑了我一把
前端·人工智能·后端
威斯软科的老司机12 小时前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生
2601_9623824313 小时前
剑指大前端全栈工程师(全2册)主要情节
javascript·实战案例·全栈工程师·剑指大前端·html5+css3