js 中堆和栈的应用与理解

本文介绍了JavaScript中堆和栈内存的概念及其应用。栈内存主要存储基本数据类型,如数值、布尔值等,而堆内存用于存放引用数据类型,如数组、对象和函数。在变量赋值时,栈中存储的是引用数据类型的地址,而非实际值。浅拷贝仅复制地址,深拷贝则会创建新的副本。讨论了堆栈在内存管理中的作用以及它们如何影响程序的性能。
摘要由CSDN通过智能技术生成


堆和栈有两种
一种是说的数据结构—堆,堆栈
一种是说的内存—堆内存,栈内存
我今天要说的就是堆内存和栈内存

定义

堆内存:

堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表

栈内存:

由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

堆和栈在js中的应用

栈:

用于储存基本数据类型

  • 每格大小有限 可做简单存储
  • 只能存储基本数据类型(大小有限)
变量存储空间值存储空间
a3
bfad
c0x0012ff7c
dtrue
e姓名

变量存储空间:用来存储变量
值存储空间:用来存储基本数据类型的值

堆内存

用于存放引用数据类型:数组,对象,函数
程序申请内存,查询空内存,第一个空内存的地址给到变量存在栈中指向堆内存的地址
在这里插入图片描述
如果将图中的变量d赋值给一个新的变量
此时不会开辟新的空间拷贝而是会将d中存的地址给新的变量,
然后储存到栈中
举个形象的例子:
把地址比做钥匙,每次需要先拿指针’领’一块空内存空间(房间),地址就像钥匙每次想进入房间做些事情需要有这个钥匙,
而变量就像是不同的人,而重新赋值就像是给他配了一把’钥匙’,
而不同的人会给这个钥匙起了不同的名字比如第一个人给他起名叫b,第二个人可能会起个e啥的,这个人可以通过变量来操作数据.
这种简单的赋值其实就是js中的浅拷贝
只复制到了个地址
如果想深拷贝可以通过
var obj2 = deepCopy(obj);
或map
可以防止修改后原数据被修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值