一尘不染

在为该对象分配其他内容时,为什么不通过引用传递该对象?

javascript

我知道在JS中,对象是通过引用传递的,例如:

function test(obj) {
    obj.name = 'new name';
}

var my_obj = { name: 'foo' };
test(my_obj);
alert(my_obj.name); // new name

但是以下原因为何不起作用:

function test(obj) {
    obj = {};
}

var my_obj = { name: 'foo' };
test(my_obj);
alert(my_obj.name); // foo

我已将对象设置为{}(空),但仍然显示foo

谁能解释这个背后的逻辑?


阅读 318

收藏
2020-05-01

共1个答案

一尘不染

如果您熟悉指针,可以做一个类比。实际上,您正在传递一个指针,因此obj.someProperty将取消对该属性的引用,并实际上覆盖该属性,而仅重写obj将杀死该指针而不覆盖该对象。

2020-05-01