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

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

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

栈空间和堆空间的一些练习
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