堆空间与栈空间

堆(heap)和栈(stack)

栈(stack)会自动分配内存空间,会自动释放。
堆(heap)动态分配的内存,大小不定也不会自动释放。

数据类型

在了解堆空间与栈空间之前先了解一下数据类型

基本数据类型:
Number、String 、Boolean、BigInt、Symbo、Null、Undefined
引用数据类型:
就是对象类型 Object type,例如:Object 、Array 、Function 、Data等。(万物皆对象)

内存空间

基本数据类型的数据值都是直接保存在“栈”中的,
引用类型的值是存放在“堆”中的。
详细说,对象类型是存放在堆空间的,在栈空间中只是保留了对象的引用地址,当 JavaScript 需要访问该数据的时候,是通过栈中的引用地址来访问的,相当于多了一道转手流程。

基础数据类型示例

let num1 = 1
let num2 = num1
num2 = 2
console.log(num1,num2) // 1,2

执行流程:
堆空间与栈空间_第1张图片

引用数据类型示例

let obj1 = {
    name: 'Aos',
    age: 20
}
let obj2 = obj1
obj2.age = 22
console.log(obj1.age,obj2.age) // 22,22 

执行流程:
堆空间与栈空间_第2张图片

浅拷贝与深拷贝

浅拷贝:将一个变量(存储的为引用类型数据)直接赋值给另一个变量以后相互之间的修改会互相影响对方;
深拷贝:在堆空间新开辟了一块内存把与obj1相同的数据值存储起来,并把这个新的引用地址保存在了一个全新的栈空间中,obj1与obj2互不影响。

你可能感兴趣的:(前端,笔记,vue,javascript,前端)