Javascript V8之后是JS解释还是编译?

Javascript V8之后是JS解释还是编译?,javascript,v8,Javascript,V8,我读了一些关于解释语言和编译语言的文章 我得出的结论是,主要的区别是直接编译到本机(没有任何中间字节码),这是解释不能做到的 然而,我继续我的阅读,我发现和文章说 “它通过实现JIT(即时)编译器将JavaScript代码编译成机器代码,就像许多现代JavaScript引擎(如SpiderMonkey或Rhino(Mozilla))所做的那样。V8的主要区别在于它不生成字节码或任何中间代码。” 现在有了V8,这会使JS成为编译语言吗?由于它直接生成机器代码,这会使JS依赖于平台吗? 那么JIT是

我读了一些关于解释语言和编译语言的文章 我得出的结论是,主要的区别是直接编译到本机(没有任何中间字节码),这是解释不能做到的 然而,我继续我的阅读,我发现和文章说 “它通过实现JIT(即时)编译器将JavaScript代码编译成机器代码,就像许多现代JavaScript引擎(如SpiderMonkey或Rhino(Mozilla))所做的那样。V8的主要区别在于它不生成字节码或任何中间代码。” 现在有了V8,这会使JS成为编译语言吗?由于它直接生成机器代码,这会使JS依赖于平台吗?
那么JIT是如何工作的呢?

Javascript仍然是一种解释语言,与平台无关

每种语言都必须在某一时刻编译成字节码,因为这是机器可以执行的唯一代码

与编译语言的区别在于,解释语言是在运行时分块编译的。这种类型的编译称为解释,因为它只不过是将代码转换为字节码,而不检查错误。编译后的语言在程序可以执行之前被完全编译,并且具有编译器检查错误的额外好处

字节码的平台依赖性完全由V8引擎处理,除了不同的浏览器版本之外,您不必担心任何其他平台


编辑:我发现一篇文章准确地解释了你的问题:

jit编译代码(从源代码到本机)的仍然是解释器,代码不是某种字节码或可执行文件。你从哪里读到V8不生成字节码或任何中间代码的?这几乎不是真的,我从未见过一个严肃的编译器没有任何中间数据结构。给你!这是一篇非常古老且几乎不准确的博文,具体的陈述是没有来源的。你能提供一个新的真实的陈述吗:)?“解释的语言是在运行时分块编译的”-嗯,不。它只是意味着字节码是由解释程序解释的,而不是由CPU本机解释的。我这边的措辞很糟糕,对不起。对于compile,我通常指的是将人类可读的代码翻译成字节码。然而,我不知道这个字节码不是由CPU直接执行的,这很有趣。