栈和堆

先来聊一下JS中比较重要的一块内容,栈(stack)和堆(heap)
:是一种后进先出的数据结构 Last In First Out(LIFO),也就是最新添加的项最早被移除。
栈的入口和出口是同一个,在栈的顶部(栈顶);栈中项的插入(叫做推入)和移除(叫做弹出)。存入栈中的数据会自动到达栈的底部(栈底)
栈的容量小(4MB)
所有的(基本)类型都保存在栈中——js的基本类型就5种,Undefined、Null、不是new出来的布尔、数字和字符串

接着将下堆:
:也是一种数据结构,它的存储方式类似于二叉树
堆的容量大
栈的速度比堆快

栈可以比喻成RAM,运行内存,速度快;堆就是ROM,存储内存,容量大

举例来说明两者之间的存储关系(如下图栈-堆图所示)
var a=10;
var name=’zhangsan’;
“=”是赋值符,操作的是栈中的值。它们都存储在栈中

继续看下面
在这里插入图片描述
此时打印的的结果是{name : lisi};为什么呢?
分析:对象属于引用类型的数据,new关键字调用的都是引用类型数据。
首先var声明的变量o存储在栈中;因为它是引用类型的数据,那么它用地址来进行引用绑定。在堆中开辟一个存储空间,并返回这个空间的地址,地址是16进制的,这个地址对应的是一个对象。那么栈中的o = 该地址;通过这个地址去找到堆中储存的数据。
将o的引用地址赋值给了o2,那么他们引用的是同一个堆中的地址,改变02内对象的name属性值,o引用地址中的数据也将进行变化

同理:数组也是相同的原理
在这里插入图片描述
总结
引用类型做相等比较时 比较的是引用地址
如果地址相同 才为 true
地址不同则为 false
栈-堆图
注:图中的16进制数据并非对应的真实数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值