JS的栈内存和堆内存的理解

首先说明:JS的值分为原始值(基本数据类型)和引用值(object,array,function,date,RegExp)

栈内存的数据是永久保存的不可修改的。
在这里插入图片描述
原始值:内存中是先进后出
引用值的值不是存在栈内存的,引用值的指针存在栈内存。

var a = 3;

在栈内存里,存了个3赋值给a
在这里插入图片描述

var a = 3;
var b = a;

又存了一个3,然后赋值给b,a和b互不影响
在这里插入图片描述

var a = 3;
var b = a;
a = 1;

将a重新赋值为1,并不是修改原来的,而是在下面重新存了一次,原来的a还原为1008,但是数据是没清除的,所以有些数据是可以还原的。一般情况下,覆盖了,原来的数据就被删除了。所以栈内存是不可修改的
在这里插入图片描述

var arr1 = [1, 2, 3, 4];
var arr2 = arr1;
arr1.push(5);

arr1 和 arr2 是一样的,都是12345
引用值的值是存在堆内存里面的,栈内存里存的是堆内存的地址,所以这里arr1,arr2都是指向同一个堆内存地址,push是向里面增加值所以会更改堆内存里面存储的值。
在这里插入图片描述

var arr1 = [1, 2, 3, 4];
var arr2 = arr1;
arr1.push(5);
arr1 = [1, 2];

重新给arr1赋值的时候,堆内存里会重新存储新的值(1,2),然后再栈内存里也会新保存一个堆内存的地址,然后将这个地址赋值给arr1,原来的arr1的存储空间恢复成了1005。所以重新赋值的时候,是不会修改原来堆内存中的值,和上面说的push增加值是不一样的。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值