栈内存空间
栈内存空间 : 就是用栈作为数据结构在内存中所申请的空间。
栈的特点:
- 后进先出,最后添加进栈的元素最先出。
- 访问栈底元素,必须拿掉它上面的元素。
- 会被提前开辟
堆内存空间
堆内存空间:就是用堆作为数据结构在内存中所申请的空间。
堆的特点:
- 最大堆:以最大数值开始的二叉树
- 最小堆:以最小数值开始的二叉树
- 不会提前开辟
变量类型与堆栈内存的关系
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