在Web浏览器环境中执行时,JavaScript是否编译为机器代码?

时间:2016-10-10 22:47:04

标签: javascript

我试图更好地了解JavaScript在Web浏览器环境中的执行方式。

就Node.js而言,我理解在Node.JS程序中编写的JavaScript代码是用C ++代码(V8)编译的,最终成为机器代码。由于Node.js可以与文件系统和其他机器级别的任务进行交互,因此有必要最终成为机器代码。

我对网络浏览器环境有不同看法。根据我的理解,主要目标是与DOM进行交互。是否需要将JavaScript编译成机器代码才能与DOM交互?

我对此感到困惑。 Node.js和Chrome都在V8上运行。 V8是用C ++编写的,据我所知,它将JavaScript代码编译成处理器可以理解的机器代码。

你需要一个JavaScript引擎来实现ECMA-262,这是引擎的全部目的(我想?)。但是,Web浏览器是否需要将JavaScript编译为机器语言级别,它正在执行哪些机器操作?

以下是我研究过的一些文章,遗憾的是,我还没有找到答案:

1 个答案:

答案 0 :(得分:3)

引擎是用C ++编写的,然后这个代码由编译器转换成机器代码。一旦代码是机器语言,它就可以由计算机运行。当引擎运行时,它可以读取用JavaScript编写的代码,解释它,并执行代码要求它执行的操作。在这种情况下,计算机中实际运行的是引擎代码,恰好正在执行另一个代码告诉它要执行的操作。节点和浏览器之间的区别在于浏览器不会做任何JavaScript要求它做的事情。另外要记住的是,某些浏览器和节点会将JavaScript代码实时转换为机器代码以获得更快的速度。浏览器也小心不要编写危险的机器代码,但理论上可能会发生。