我试图更好地理解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编译到机器语言级别,它正在执行哪些机器操作?
下面是我研究过的几篇文章,不幸的是,我在这些文章中没有找到我的问题的答案:
发布于 2017-02-05 16:29:58
引擎用C++编写,然后由编译器将这些代码转换为机器代码。一旦代码是机器语言,它就可以由计算机运行。当引擎运行时,它可以读取用JavaScript编写的代码,解释它,并执行代码要求它做的事情。在这种情况下,实际上在计算机中运行的是引擎代码,这恰好是在执行另一种代码告诉它要做的事情。节点和浏览器之间的区别是浏览器不会做JavaScript要求它做的任何事情。另外要记住的是,一些浏览器和节点会实时地将JavaScript代码转换为机器代码,以获得更高的速度。浏览器也要小心,不要编写危险的机器代码,但理论上可能会发生这种情况。
https://stackoverflow.com/questions/39967892
复制