数据是怎么存储的
# 基本数据类型和引用数据类型
JS的数据类型分为两大类:
- 基本数据类型:String,Boolean,Number,Undefined,Null,Bigint,Symbol
- 引用数据类型:Object(Array,Date,RegExp,Function)
两者区别:
- 基本数据类型存储在栈中,引用数据类型存储在堆中
- 在JS中,基本数据类型的赋值完全赋值变量的值,而引用类型的赋值是赋值地址
# 栈内存和堆内存
- 在JS的内存机制中,会在内存中开创一个栈和一个堆,用于存储数据
- 两者的区别主要在于:
堆存储空间比栈大
,栈执行速度比堆速度快
。 - 堆存储的一个很明显缺点在于分配内存和回收内存都会占用一定的时间。
# 为什么这样存储
栈和堆的特点分别是:堆比栈大
,栈比堆快
。基本数据类型比较稳定,而且相对来说占用的内存小,所以可以放在栈内存中,方便直接取用;而引用数据类型大小是动态的,而且是无限制的,可以说,引用数据类型占用得内存太大,放在堆内存中是最好得选择。
# 可以把所有的数据放在栈中吗?
- 当然是不可以,对于系统栈来说,它的功能除了存储数据之外,还有
创建并切换函数执行上下文
的功能 - 如果用栈去存储内存占用极大的引用数据类型数据,那么系统栈切换上下文的开销将变得巨大,切换效率就会明显降低。 这也是JS的内存机制这样存储数据的合理性所在。
# 所有基本数据类型都存储在栈中吗?
闭包变量即使是基本数据类型也被存储在堆内存中
最近更新时间: 2021/08/25 17:25:09
- 01
- 2023/07/03 00:00:00
- 02
- 2023/04/22 00:00:00
- 03
- 2023/02/16 00:00:00