js中的堆栈理解

栈内存空间

栈内存空间 : 就是用栈作为数据结构在内存中所申请的空间。
栈的特点

  • 后进先出,最后添加进栈的元素最先出。
  • 访问栈底元素,必须拿掉它上面的元素。
  • 会被提前开辟

堆内存空间

堆内存空间:就是用堆作为数据结构在内存中所申请的空间。
堆的特点:

  • 最大堆:以最大数值开始的二叉树
  • 最小堆:以最小数值开始的二叉树
  • 不会提前开辟

变量类型与堆栈内存的关系

JS的基本数据类型有7种:

  • string
  • number
  • boolean
  • null
  • undefined
  • symbol
  • bigInt

基本数据类型变量保存在栈内存中,因为基本数据类型占用空间小、大小固定,通过值来访问,属于被频繁使用的数据。

引用数据类型

  • array
  • function
  • object

引用数据类型存储在堆内存中,引用数据类型占据空间大、大小不固定,如果存储在栈中,将影响程序的运行性能。

引用数据类型会在栈中存储一个指针,这个指针指向堆内存空间中该实体的起始地址。

当解释器寻找引用值时,会先检索其在栈中的地址,取得地址后,从堆中获得实体。

堆内存空间与堆内存的区别

堆内存空间:相当于一个采用二叉堆作为数据结构的容器。

堆内存:指的是一个引用类型的具体值。

堆内存存在于堆内存空间中。

基本数据类型的复制

let name = "神奇的程序员";
let alias = name;
alias = "大白";
//name、alias都是基本类型,它们的值存储在栈内存。
//它们分别有各自独立的栈空间
//因此,修改alias的值,name不受影响

引用数据类型的复制

let book = {title:"书", id: 12}
let info = book;
info.title = "故事书";
console.log(book.title); // 故事书
//info、book都是引用类型,它们的引用存在栈内存,值存在堆内存
//它们的值指向同一块堆内存,栈内存中会复制一份相同的引用

借鉴:https://juejin.cn/post/6942880039897825294

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值