JS引擎中怎么在幕后工作

介绍

小编给大家分享一下JS引擎中怎么在幕后工作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>介绍

您是否曾经问过自己”这在幕后如何运作?”。我知道我有

在接下来的系列文章中,我们将深入探讨JS的世界,从引擎到幕后工作原理,从引擎到提升,执行上下文、词法环境等概念。

对某些概念有深刻的了解可以更好地理解代码,在我们的工作中表现更好,此外,它在面试中非常有用。

而且这可能是一个非常有趣的学科,白马王子,白马王子

在开始之前,还有一件重要的事情要提到——每个JS引擎的构建方式都是不同的,因此无法涵盖它们的全部工作原理,因此,我们将探索V8的工作原理,但是其他引擎中的概念仍然非常相似,只是其中一些引擎可能会实现不同的功能。

以下是V8工作原理的概述:

 JS引擎中怎么在幕后工作

如果您还不了解这些内容,请不要担心,在本文结尾处,您将了解该图的每个步骤。

因此,顺便去吧!

<强>环境

计算机,编译器甚至浏览器实际上无法”理解”用JS编写的代码。如果是这样,代码如何运行吗?

在后台,JS始终在特定环境中运行,最常见的是:

  • 浏览器(迄今为止最常见)

  • Node.js(这是一个运行时环境,允许您在浏览器外部(通常在服务器中)运行JS)

引擎

JS引擎中怎么在幕后工作

因此,JS需要在特定环境中运行,但是该环境到底是什么?

当您使用JS编写代码时,会以人类可读的语法(包括字母和数字)来编写代码。如前所述,机器无法理解此类代码。

这就是每个环境都有引擎的原因。

通常,引擎的工作是获取该代码并将其转换为用机器代码编写的代码,该代码最终可以由计算机处理器运行。

每个环境都有自己的引擎,最常见的引擎是Chrome V8(Node也使用该引擎),Firefox SpiderMonkey,Safari的JavaScriptCore和IE的Chakra。

所有引擎的工作方式都相似,但是每个引擎之间存在差异。

同样重要的是要记住,在后台引擎只是一个软件,例如Chrome V8是用C ++编写的软件。

解析器

JS引擎中怎么在幕后工作

因此,我们有一个环境,并且在该环境中有一个引擎。引擎在执行代码时要做的第一件事是使用解析器检查代码。

解析器了解JS语法和规则,它的工作是逐行检查代码,并检查代码的语法是否正确。

如果解析器遇到错误,它将停止运行并发出错误。如果代码有效,则解析器会生成称为“抽象语法树”(简称AST)的内容

抽象语法树(AST)

JS引擎中怎么在幕后工作

因此,我们的环境中有一个引擎,其中包含一个解析器,该解析器生成AST。但是什么是AST,为什么我们需要它?

AST是一种数据结构,它不是JS所独有的,而是由许多其他语言的编译器实际使用的(其中一些语言是Java,C#,Ruby,Python)。

AST只是代码的树形表示,引擎创建AST而不是直接编译为机器代码的主要原因是,当您将代码包含在树数据结构中时,转换为机器代码更容易。

实际上,您可以查看AST的外观,只需将任何代码放入ASTExplorer网站中,并查看创建的数据结构:

JS引擎中怎么在幕后工作

解释器

JS引擎中怎么在幕后工作

解释器的工作是获取已创建的AST,并将其转换为代码的中间表示(IR)。

我们将在需要进一步上下文以充分了解其含义的基础上,尽快了解有关解释器的更多信息。

中级代表制(IR)

那么,解释器从AST生成的IR是什么?

IR是代表源代码的数据结构或代码。它的作用是介于以JS之类的抽象语言编写的代码与机器代码之间的中间步骤。

本质上,您可以将红外视为机器代码的抽象。

JS引擎中怎么在幕后工作