栈空间和堆空间的解构图

290 阅读2分钟
栈空间
1.变量的本质是   空间地址
2.基本类型 (值类型)--string number bool  【nullundefined】-这两个很少用来赋值,基本不考虑
    -基本类型的数据是存储在栈空间中的 在栈空间中是存储 “值本身”
​
3.在js中  一个变量赋值给另一个变量 都是 副本赋值,
    -赋值是将这个变量在栈空间中存 储的“内容” 复制一份 进行赋值
        -这个时候这个“内容”是指 存储在栈空间的值本身
​

1649698544368.png

堆空间
1.变量的本质是   空间地址
​
2.引用类型的数据 --- objectfunctionarray 
引用类型的数据,开辟两块空间 在栈空间存储的是  堆空间的地址
​
3.在js中  一个变量赋值给另一个变量 都是 副本赋值,
    -赋值是将这个变量在 栈空间中存储的“内容”复制一份进行赋值
        -这个时候这个“内容”是指存储在 堆空间的地址
​

1649700727711.png

重置对象会改变对象的引用地址

1649784261153.png

栈空间和堆空间的一些练习
4.有如下代码,请问输出的结果是多少? [图片] 
let obj1 = {
    name:'黑马程序员',
    level:1
}
let obj2 = obj1
obj2.name = '传智播客'   ------使用点语法,修改其中一个另外一个也会变
                                        ------点语法不会改变对象的引用地址,只有重置对象会改变引用地址
console.log(obj1.name)
​
A、undefined
B、报错
C、黑马程序员
D、传智播客
​
题目解析:: D
5. 有如下代码,请问输出的结果是多少? [图片]   画图分析
   let obj1 = {
       name:'黑马程序员',
       level:1
   }
   let obj2 = obj1
       obj2 = {      //重置对象了,所以obj2和obj1的引用地址不一样了,所以修改obj2,obj1不受影响 
           name:'传智播客',
           level:1
       }
   console.log(obj1.name)
​
A、undefined
B、 报错
C、黑马程序员
D、传智播客
​
题目解析: C