javascript 中引用类型变量的混淆
Confusion around reference type varaible in javascript
let user = {
name: "John",
age: 30,
sayHi() {
alert( this.name );
}
};
let admin = user;
user = null; // overwrite to make things obvious
admin.sayHi(); // John
这里的用户变量应该是引用类型变量,而不是原始变量。因此,当我们将用户变量分配给 admin 变量时,我们并没有深入处理用户变量。因此两者都应该指向堆内存中的相同位置。
所以当我们分配 user = null 时。所以 admin 变量也应该等于 null,因为它们都应该指向堆内存中的相同位置。
但是管理对象仍然能够访问 sayHi() 方法。谁能解释一下为什么?
你需要这样看。该变量只是指向在浅拷贝期间创建的对象。当您将用户分配给 null 时,该对象仍然存在,只是其引用已更改为 null。管理员仍然指向参考用户早先指向因此 behviour
let user = {
name: "John",
age: 30,
sayHi() {
alert( this.name );
}
};
let admin = user;
user = null; // overwrite to make things obvious
admin.sayHi(); // John
这里的用户变量应该是引用类型变量,而不是原始变量。因此,当我们将用户变量分配给 admin 变量时,我们并没有深入处理用户变量。因此两者都应该指向堆内存中的相同位置。
所以当我们分配 user = null 时。所以 admin 变量也应该等于 null,因为它们都应该指向堆内存中的相同位置。
但是管理对象仍然能够访问 sayHi() 方法。谁能解释一下为什么?
你需要这样看。该变量只是指向在浅拷贝期间创建的对象。当您将用户分配给 null 时,该对象仍然存在,只是其引用已更改为 null。管理员仍然指向参考用户早先指向因此 behviour