let user = {
name: "John",
age: 30,
sayHi: function () {
//console.log(this);
alert(this.name);
}
};
let admin = user;
user = null;
admin.sayHi();
admin.sex = "nan";
console.log(user) //null
console.log(admin) //{age: 30,name: "John",sayHi: ?(),sex: "nan"}这里不应该是null吗
//admin引用的是user为什么user改变了admin还没变
console.log("----------")
//-----------------------------------
let obj = {
age : 18,
name : "asd"
}
let user1 = obj;
let user2 = obj;
user1.age = 20;
console.log(user1);//20
console.log(user2);//20
###引用类型一般指对象函数等数据,这些数据存在堆内存中。
user等变量在栈内存中,他的值是一个对象,而对象存放在堆内存中,所以他存放的值实际上是数据在堆内存中的地址,比如0x0001,这就是为什么叫引用型数据
admin赋值为user,其实赋值的是数据的堆内存地址0x0001,这时候再把user清空,不是删除堆内存中的这个数据,而是将user中存放的地址消除,数据还在堆内存中的,如何清除数据这个是垃圾回收,admin中存放的地址是不会受影响的
###1.
= {age : 18,name : "asd"}
= null
创建了内存空间;
2.
let admin = user;
只是赋值了空间地址
是复制了一个指向user对象的指针吗?