JS当中的堆与栈

JS当中的堆与栈

首先,堆与栈都是开辟的内存。

栈内存中存贮的是JS基础数据类型数据,如Number,String,布尔值,null,undefind等,这些值占据的内存空间小。栈内存遵循是的先进后出,后进先出的规则,像我们存放光盘一样,第一张光盘放在最底层,而最后一张光盘放在最顶层,当我们需要使用最后一张光盘时,因为最后一张光盘在最顶层,所以他是最先拿出来的,而我们想使用第一张光盘时,则需要把中间的光盘依次取出才能使用第一张,所以这样理解栈内存的先进后出,后进先出即可。

堆内存中存贮的是引用数据类型,如Object,Array,Function,这些数据类型复杂且数据量大小不固定,需要动态开辟计算大小。堆内存则是想何时添加就何时添加,想何时去除就何时去除。

并且这些引用类型的变量名会存贮与栈内存中,变量存贮的是一个指向于堆内存的一个地址,当我们访问这些引入类型时,通过栈内存中的内存指向访问堆内存。

所以当我们使用浅拷贝时,如果拷贝的是基础数据类型,那则是栈内存中基础类型值的复制,而拷贝复杂数据类型时,复制的是栈内存中存贮的指向堆内存的地址,因为指向的都是一个堆内存,所以当我们浅拷贝后修改浅拷贝后的对象后,实则修改的是堆内存中的对象,则我们浅拷贝的对象属性也发生改变。

当我们使用深拷贝时,基数数据类型不变,而引入数据类型则是在堆内存新开辟一个内存地址,复制你拷贝对象的所有值存入新的内存地址中,栈内存中的变量指向于新的堆内存地址。

浅拷贝:Object.assign,jQuery extents

深拷贝:JSON.parse(JSON.stringify(object)),循环递归

搬砖工的自我理解~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值