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