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

相关推荐
wefly201718 分钟前
jsontop.cn:一站式 JSON 全能工具集,开发全流程效率神器
前端·javascript·python·django·json·json在线转换
XDHCOM1 小时前
Redis远程连接命令详解,分享高效配置与安全实践技巧
前端·redis·安全
YAY_tyy3 小时前
Vue3 + Three.js 实战:自定义 3D 模型加载与交互全流程
前端·javascript·vue.js·threejs
星河耀银海3 小时前
3D效果:HTML5 WebGL结合AI实现智能3D场景渲染
前端·人工智能·深度学习·3d·html5·webgl
英俊潇洒美少年4 小时前
SSE 流式接口讲解
javascript
美狐美颜sdk8 小时前
从人脸关键点到动态贴图:面具特效在美颜SDK中的实现原理
前端·图像处理·人工智能·直播美颜sdk·美颜api
我命由我123458 小时前
React Router 6 - 编程式路由导航、useInRouterContext、useNavigationType
前端·javascript·react.js·前端框架·html·ecmascript·js
威联通网络存储9 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
anOnion9 小时前
构建无障碍组件之Tabs Pattern
前端·html·交互设计
一招定胜负10 小时前
课堂教学质量综合评分系统
java·linux·前端