IT与OT之战一触即发
始值是不可变的,所以 JS 不会更改原始值,而是创建一个新值。 JavaScript 中的引用 所有变量首先指向堆栈。如果是非原始值,则堆栈包含对堆中对象的引用。 堆的内存没有按特定的方式排序,所以我们需要在堆栈中保留对其的引用。我们可以将引用视为地址,并将堆中的对象视为这些地址所属的房屋。
请记住,JS 将对象和函数存储在堆中。基本类型和引用存储在堆栈中。 堆栈是 JS 用于存储静态数据的数据结构。静态数据是引擎在编译时能知道大小的数据。在 JS 中,包括指向对象和函数的原始值(strings,number,boolean,undefined和null)和引用类型。 由于引擎知道大小不会改变,因此它将为每个值分配固定数量的内存。 在执行之前立即分配内存的过程称为静态内存分配。这些值和整个堆栈的限制取决于浏览器。 堆:动态内存分配 堆是另一个存储数据的空间,JS 在其中存储对象和函数。 与堆栈不同,JS 引擎不会为这些对象分配固定数量的内存,而根据需要分配空间。这种分配内存的方式也称为动态内存分配。
下面将对这两个存储的特性进行比较: 分配内存 JS 会为我们处理这个问题:它分配我们创建对象所需的内存。 使用内存 使用内存是我们在代码中显式地做的事情:对内存的读写其实就是对变量的读写。 释放内存 此步骤也由 JS 引擎处理,释放分配的内存后,就可以将其用于新用途。 内存管理上下文中的“对象”不仅包括JS对象,还包括函数和函数作用域。 内存堆和堆栈 现在我们知道,对于我们在 JS 中定义的所有内容,引擎都会分配内存并在不再需要内存时将其释放。 我想到的下一个问题是:这些东西将被储存在哪里? JS 引擎在两个地方可以存储数据:内存堆和堆栈。堆和堆栈是引擎是用于不同目的的两个数据结构。
堆栈:静态内存分配 (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |