JS引擎有什么

74 阅读3分钟

[学习笔记](016 Call Stack and Memory Heap_哔哩哔哩_bilibili)

调用堆栈和内存堆

JavaScript引擎为我们做了很多工作。但最重要的事情实际上是阅读我们的代码并正确执行它。

这个步骤栏中最重要的两件事是什么,我们需要一个地方来存储正确的信息。那就是存储我们的变量或对象是我们应用程序的数据。一个实际运行并逐行跟踪我们代码上发生的事情的地方,我们使用调用堆栈和内存堆。我们需要内存堆作为存储和写入信息的地方。因为归根结底,所有程序都只是这样的读写操作。我们有一个地方来分配内存,使用内存和释放内存,就像这里的橱柜一样。

image.png

我们需要一个地方来跟踪我们在代码中的位置,以便我们可以按顺序运行代码。有了这两件事,JavaScript引擎就能够做到这一点。

所以查看内存堆是内存分配发生的地方。调用堆栈即CallStack是引擎跟踪代码执行位置的地方。

当我们查看调用堆栈和内存堆时。如果我们写一个简单的。常数等于610。在这里看到的是,为数字变量分配内存并使用这个数字变量。

我们要告诉引擎为字符串分配内存。所以现在每当我们使用字符串时。我们进入内存堆中,指向我们内存堆中某个地方并找到字符串的值。

image.png

我们的内存堆是JavaScript引擎为我们提供的内存中的一个大区域。它可用于以无序方式存储任何类型的任意数据,该内存没有顺序。它只是允许我们使用变量来指向不同的存储区域,就像这里的一个小橱柜一样。都在优化这里的空间分配方式。但是我们不需要担心。JS引擎会照顾我们将数据放入存储盒中。内存堆并不难,只是我们存储信息的地方。

image.png

调用堆栈存储函数和变量。当你的代码在堆栈的每个入口执行时,堆栈的状态也称为堆栈帧,也就是这里的帧,这3个堆栈。允许我们知道我们在代码中的位置。它以先入后出模式运行,即先入后出。我们可以不断添加函数到堆栈中,最终它会弹出所有函数调用,直到我们完成命令。

image.png

image.png subtractTwo函数Return的时候就把堆栈中subtractTwo函数弹出堆栈。

我们使用内存堆来实际指向我们存储的不同变量、对象和数据,以便我们知道在哪里查看。

现在,由于每个JavaScript引擎都有不同的实现,分配变量的位置并不总是100%相同。所以考虑它的一个好方法是这个简单的变量通常可以存储在堆栈上,稍后会了解到这一点。对象复杂的数据结构,如我们将要讨论的对象数组和函数,存储在内存堆中。调用堆栈最酷的一点是它允许JavaScript知道它需要在代码中的位置。调用堆栈顶部的任何东西都是JavaScript运行的地方。