堆、栈

本文源自公众号: 高级前端进阶 1-3,木易杨的内容,这边做下记录与一点自己的理解

栈数据结构

栈的结构就是后进先出(LIFO),如图在这里插入图片描述

堆数据结构

堆数据结构是一种树状结构,存在类似图书与书架非常相识,我们只需要知道书名,取值key-value

对列

对列是一种先进先出(FIFO)的数据结构,这是事件循环(Event Loop)的基础结构在这里插入图片描述
1、基本类型 --> 保存在栈内存中,因为这些类型在内存中分别占有固定大小的空间,通过按值来访问。基本类型一共有6种:Undefined、Null、Boolean、Number 、String和Symbol

2、引用类型 --> 保存在堆内存中,因为这种值的大小不固定,因此不能把它们保存到栈内存中,但内存地址大小的固定的,因此保存在堆内存中,在栈内存中存放的只是该对象的访问地址。当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。

var a = 20;
var b = a;
b = 30;
// 这时a的值是多少?
// a为20,因为为基本类型,它的值存储在栈中
var a = { name: '前端开发' }
var b = a;
b.name = '进阶';

// 这时a.name的值是多少

// 因为a 和 b都是指向同一个堆, 公用一个堆,所以 a.name 为  进阶
var a = { name: '前端开发' }
var b = a;
a = null;

// 这时b的值是多少

// b为 {name: '前端开发'},因为此时只是改变了a的指向地址,b的指向地址不变
var a = {n: 1};
var b = a;
a.x = a = {n: 2};

a.x     // 这时 a.x 的值是多少
b.x     // 这时 b.x 的值是多少

// 从运算优先级讲, . 的优先级大于 = ,所以在堆中创建了一个 x,此时堆的内容为 {n: 1, x: undefined}, 然后从右往左赋值,a的指向被重新指向了 {n:2}这个堆, a.x实际为原本堆的x,所以此时 堆,x = {n:2},记住一个,对象是引用!!!

// a.x 为undefined
// b.x 为 {n: 2}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值