【问题标题】:Can Javascript be considered a interpreted language when using Google Chrome (V8)?使用 Google Chrome (V8) 时,Javascript 可以被视为解释语言吗?
【发布时间】:2026-01-09 07:55:02
【问题描述】:

我正在阅读这篇关于 V8(Google 的 Javascript 引擎)的优秀文章:https://developers.google.com/v8/design#mach_code

有一次,他们说 Javascript 直接编译成机器语言,没有任何字节码或解释器。

引用:

V8 将 JavaScript 源代码直接编译成机器码 首先执行。没有中间字节码,没有 口译员。

那么,为什么 Javascript 仍然与“脚本”和“解释”语言一起列出,当它被明确编译时(至少在 V8 中)?



编辑: 如果已编译,我能否以某种方式从 Javascript 创建可执行文件?那需要以某种方式将其链接到 V8 吗?

考虑到这个问题,我找到了这句话:

V8 可以独立运行,也可以嵌入到任何 C++ 应用程序中。

这里:http://code.google.com/p/v8/

【问题讨论】:

  • 如果是这样,那么它就不再是真正的 [java]“脚本”了。也可以称之为“JavaCompiled”:)
  • 该死,但 JavaScript 听起来好……多汁。
  • 我不认为他暗示,@GabyakaG.Petrioli,他只是将单词分开......
  • 是的.. 但是通过分隔单词,他暗示 java 部分本身具有重要意义...(无论如何。 ..我只是为普通读者说明这一点..
  • @GabyakaG.Petrioli - 我知道这不是 Java。这是一个文字玩笑。用“脚本”调用某些东西,但编译它只是改变了一些事情。很抱歉让您感到困惑。

标签: javascript google-chrome browser v8 interpreted-language


【解决方案1】:

这就是为什么“解释语言”和“编译语言”是草率术语的例子。一种语言是编译还是解释是实现的属性,而不是语言本身的属性。

许多人将“动态类型语言”(如 JavaScript)与“解释”混淆,将“静态类型语言”与“编译”混淆,但这些只是相关性而非绝对性。可以编译动态语言(尽管它通常比编译静态语言更棘手),并且可以解释静态语言(例如:Hugs 是 Haskell 的解释器)。

【讨论】:

    【解决方案2】:

    它是一种脚本语言,因为 JS 代码旨在作为源代码提供和运行。

    如果编码人员要提供编译后的二进制文件供您执行,那么它就不是脚本。

    另外,无论它在 Chrome 上做什么,相同的 Javascript 源代码也必须在其他平台上运行,这可能或多或少是一个传统的脚本环境。这也不会改变代码本身作为脚本的性质。

    即使你把它编译到了极致,JS 本质上仍然是一种脚本语言。几乎所有您能想到的脚本语言(Perl、PHP ......)都有合适的传统编译器;这不会阻止它们成为脚本语言,也不会阻止它们的源代码成为脚本。

    同样,许多传统上编译的语言都有解释器。

    最后,将一种语言“编译”成另一种语言的概念进一步混淆了这个问题。这已经存在了一段时间,但这个想法已经真正开始使用像 Coffeescript 这样的旨在编译成 Javascript 的语言。那么编译出来的 Coffeescript 代码叫什么?

    术语并不是真的很有帮助,尤其是现在,但在您所问的上下文中,您的问题的最终答案是,是的,Javascript 仍然是一种脚本语言。

    【讨论】:

      【解决方案3】:

      这里,我来演示一下代码:

      exeFuncDefinedLater(100); // prove that js is a compiling language
        
      function exeFuncDefinedLater(num) {
        console.log("Your number is: " + num);
      }
      

      这段代码可以在 Chrome 浏览器和 Node js 上运行。

      如果有人说js是解释型语言,那么这段代码就会崩溃,因为你运行 later() 时,它不应该知道后面的函数体。

      这可以证明js是一种编译语言,因为它编译了后面的函数(所以机器可以知道它),然后执行它。

      【讨论】: