我是Web开发的新手,我正在研究JavaScript。
来自斯坦福大学的course:
JavaScript是一种解释型语言,而不是编译语言。在运行之前,需要编译诸如C ++或Java之类的程序。源代码通过一个名为编译器的程序传递,该程序将其转换为机器理解并可以执行的字节码。相比之下,JavaScript没有编译步骤。相反,浏览器中的解释器会读取JavaScript代码,解释每一行并运行它。更现代的浏览器使用称为即时(JIT)编译的技术,该编译将JavaScript编译为可执行字节码,就像它将要运行一样。
来自 You Don't Know JS: Scope & Closures Kyle Simpson:
...但尽管JavaScript属于“动态”或“解释”语言的一般类别,但它实际上是一种编译语言。
我们只是说,为了简单起见,必须先编译任何JavaScript片段(通常在之前!)才能执行。因此,JS编译器将采用程序var a = 2;然后先编译它,然后立即准备执行它。
从Stack Overflow的一些问题来看,有一些想法如下:它取决于语言的实际实现。
你有什么想法吗?
答案 0 :(得分:2)
嗯,你可能会进入语义和术语差异,但有两个要点:
Javascript(在网页中)以其源代码形式(或至少以最小化的文本形式)分发,而不是作为提前编译的二进制文件
即使浏览器也没有将Javascript编译成可执行的机器代码(虽然它的某些部分可能是最近的性能优化),但是通过虚拟机执行
答案 1 :(得分:0)
Chrome浏览器使用V8引擎来编译Javascript,就像其他浏览器可能使用Rhino或SpiderMonkey一样。
V8是由Google用C ++编写的JavaScript引擎。它用于在客户端(Google Chrome)和服务器端(node.js)应用程序中编译JS。为了提高速度,V8无需使用解释器就将JavaScript代码转换为更有效的机器代码。
V8通过实现JIT(即时)编译器,像许多SpiderMonkey或Rhino(Mozilla)这样的现代JavaScript引擎一样,在执行脚本时将JavaScript代码编译为机器代码。 V8的主要区别在于它不会产生字节码或任何中间代码。它只是即时编译JavaScript。
希望这会有所帮助!