我正在努力更好地了解JavaScript在Web浏览器环境中的执行方式.
就Node.js而言,我理解在Node.JS程序中编写的JavaScript代码是用C++代码(V8)编译的,最终成为机器代码.由于Node.js可以与文件系统和其他机器级任务进行交互,因此对我来说最终必须成为机器代码才有意义.
我对Web浏览器环境有不同的看法.根据我的理解,主要目标是与DOM进行交互.JavaScript是否需要编译成机器代码才能与DOM交互?
我很困惑.Node.js和Chrome都在V8上运行.V8是用C++编写的,据我所知,它将JavaScript代码编译成处理器可以理解的机器代码.
你需要一个JavaScript引擎来实现ECMA-262,这就是引擎的全部目的(我想?).但是,Web浏览器是否需要将JavaScript编译为机器语言级别,它正在执行哪些机器操作?
以下是我研究的一些文章,不幸的是,我还没有找到我的问题的答案:
引擎是用 C++ 编写的,然后这些代码由编译器翻译成机器代码。一旦代码是机器语言,它就可以由计算机运行。当引擎运行时,它可以读取用 JavaScript 编写的代码、解释它并执行代码要求它执行的操作。在这种情况下,计算机中实际运行的是引擎代码,它恰好在做另一个代码告诉它要做的事情。节点和浏览器之间的区别在于浏览器不会执行 JavaScript 要求它执行的任何操作。要记住的另一件事是,某些浏览器和节点会实时将 JavaScript 代码转换为机器代码以提高速度。浏览器也很小心,不要编写危险的机器代码,但理论上可能会发生。