为什么Java代码需要编译,而JavaScript代码不需要编译
为什么用Java编写的代码需要用JVM解释的字节码编译,但用JavaScript等语言编写的代码不需要编译,可以直接在浏览器中运行?
有没有一种简单的方法来理解这一点?
这两种语言的编写方式之间的根本区别是什么,可能有助于理解这种行为?
我不是CS学生,所以请原谅这个问题的天真。
为什么用Java编写的代码需要用JVM解释的字节码编译,但用JavaScript等语言编写的代码不需要编译,可以直接在浏览器中运行?
有没有一种简单的方法来理解这一点?
这两种语言的编写方式之间的根本区别是什么,可能有助于理解这种行为?
我不是CS学生,所以请原谅这个问题的天真。
从历史上看,JavaScript是一种解释型语言。这意味着解释器接受源代码并在一个步骤中执行所有代码。这里的优点是简单和灵活,但口译员非常慢。编译器将高级语言转换为本机处理器或 VM(在本例中为 Java VM)可以直接执行的较低级别语言。这要快得多。
现代浏览器中的JavaScript现在是动态编译的。因此,当加载脚本时,JavaScript引擎做的第一件事就是将其编译为字节码,然后执行它。从最终用户的角度来看,缺少整个编译步骤的原因是,浏览器开发人员(谢天谢地)保持了JavaScript未显式编译的要求。
Java从一开始就是一种总是有明确编译步骤的语言。但在许多情况下,情况已不再如此。像IntelliJ或Eclipse这样的IDE可以动态编译Java,并且在许多情况下可以删除显式编译步骤。
JavaScript和Java不是一回事。他们可能有一个相似的名字,但我向你推荐JS大师 - 道格拉斯·克罗克福德(Douglas Crockford),以帮助澄清他们实际上根本不相关的事实。
现实情况是,没有什么能阻止Java成为一种解释型语言,同样没有什么能阻止JavaScript成为一种编译语言(Chrome的javascript引擎确实做了编译来提高速度,并且做得很好)。
在浏览器的上下文中,Java的运行方式与Flash或Silverlight相同 - 需要一个插件,浏览器充当该插件的主机;它承载 Java 运行时环境。
Javascript被设计为浏览器的脚本语言,这就是为什么浏览器可以在本地理解它的原因。但是,浏览器实际如何实现该代码的运行完全取决于浏览器。也就是说 - 它可以纯粹在脚本级别运行,假设对下一行代码的零知识并运行纯粹基于软件的堆栈;或者它可以执行一些JIT以使代码更接近硬件并(希望)提高速度。