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

Is JavaScript compiled to machine code when executed in a Web Browser Environment?

本文关键字:是否 编译 机器码 执行 Web 浏览器 环境 JavaScript      更新时间:2023-09-26

我试图更好地理解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编译为机器语言级别,它执行的是什么机器操作?

这里是我研究过的几篇文章,不幸的是,我没有在其中找到我问题的答案:

  • JavaScript引擎- Wiki
  • V8引擎如何工作
  • 浏览器如何处理JavaScript

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