用Java语言吊起===编译?


9

在最近的一次面试中,我遇到了一个有趣的观点。

用Java语言进行提升是关于将变量声明和函数声明移到脚本顶部。我们可以将此阶段称为编译阶段吗?

我知道以下事实:Javascript解释器在输入脚本上有2个传递,在第一个传递中它会提升,而在第二个传递中它实际上会执行脚本。知道Javascript是一种解释语言后,这个问题使我有些困惑。

Answers:


18

不。吊装不是编译。

提升是开发人员创建的一个概念,用于解释在将变量和函数声明移至其包含范围的顶部时在编译期间发生的情况。

编译是将Javascript代码转换为现在或以后执行的其他表示形式(通常是某种可执行代码)时发生的情况。Chrome的V8 Javascript引擎实际上有两个编译器。一个可以立即创建快速且肮脏的可执行代码,另一个可以稍后创建优化的代码。

编程语言没有定义为“编译”或“解释”语言。而是根据需要解释或编译语言。


使用Javascript 进一步阅读
V8引擎的工作原理


1
维基百科上有关解释语言的文章也有助于“解释”与“编译”的区别:en.wikipedia.org/wiki/Interpreted_language

如果我正确理解了这一点,那么吊装不会将脚本转换为机器可读的代码,因此不是编译。我对吗?:)
Rahul Desai 2015年

再次阅读我的答案的第二段。
罗伯特·哈维

1
在我最近与那个面试官关于这个话题的对话中,他给我提供了FrontendMasters.com高级JS课程的参考,其中Kyle Simpson解释说它是编译,也就是说,如果我们将其与Bash脚本进行比较的话,在第3行时,它不知道在第4行中会有什么期望。但是,对于JS编译器,它在提升过程中早些时候已经在第4行中看到了什么。只是它不会像其他语言一样转换为二进制代码。每次运行Java脚本时都会对其进行编译。
拉胡尔·德赛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.