首页 > web前端 > js教程 > 正文

了解 JavaScript 中的堆栈和堆。

DDD
发布: 2024-10-14 06:19:29
原创
900 人浏览过

Understanding Stack and Heap in JavaScript .

在 JavaScript 中,栈和堆是用于管理数据的两种类型的内存,每种都有不同的用途:

  1. 堆栈

*什么是栈和堆*
堆栈:堆栈用于静态内存分配,主要用于存储基本类型和函数调用。它是一个简单的后进先出 (LIFO) 结构,使其访问速度非常快。

堆:堆用于动态内存分配,其中存储对象和数组(非基本类型)。与堆栈不同,堆更复杂且访问速度更慢,因为它允许灵活的内存分配。

堆栈内存示例:

let myName = "Amardeep"; //primitive type stored in stack 
let nickname = myName; // A copy of the value is created in the Stack 
nickname = "Rishu"; // Now changing the copy does not affect the original value .
console.log(myName); // output => Amardeep (Original values remains unchanged since we are using stack)
console.log(nickname); // output => rishu (only the copied value will changed)
登录后复制

在此示例中:

  • myName 作为原始类型存储在 Stack 中。
  • 当昵称被分配 myName 的值时,会在 Stack 中创建该值的副本。
  • 更改昵称不会影响 myName ,因为它们在内存中是独立的副本。

堆内存示例
现在让我们检查一下堆中如何管理非原始数据类型(对象)。

let userOne = {         // The reference to this object is stored in the Stack.
    email: "user@google.com",
    upi: "user@ybl"
};                      // The actual object data is stored in the Heap.

let userTwo = userOne;  // userTwo references the same object in the Heap.

userTwo.email = "amar@google.com"; // Modifying userTwo also affects userOne.

console.log(userOne.email); // Output: amar@google.com
console.log(userTwo.email); // Output: amar@google.com
登录后复制

在此示例中:

  • userOne 保存对存储在堆中的对象的引用。 -userTwo 被分配相同的引用,这意味着 userOne 和 userTwo 都指向堆中的同一个对象。 -更改 userTwo.email 直接影响 userOne.email,因为两个引用都指向内存中的同一位置。

要点
*堆栈内存 * 用于存储原始类型和函数调用。每次分配一个值时,都会在堆栈中创建一个新副本。
*堆内存 *用于存储对象和数组。引用同一对象的变量共享内存中的相同内存位置,因此更改一个变量会影响其他变量。

以上是了解 JavaScript 中的堆栈和堆。的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板