Javascript 为什么我们可以用函数参数修改对象,但不能用同样的方法重新定义对象?

Javascript 为什么我们可以用函数参数修改对象,但不能用同样的方法重新定义对象?,javascript,object,Javascript,Object,示例代码: var person = { name: 'Sam', age: 45 }; // This function is able to modify the name property function nameChanger (obj, name) { obj.name = name; } nameChanger(person, 'Joe'); // modifies original object 但试图在类似函数中重新定义异议根本不起作用: var perso

示例代码:

var person = {
  name: 'Sam',
  age: 45
};

// This function is able to modify the name property
function nameChanger (obj, name) {
  obj.name = name;
}

nameChanger(person, 'Joe');  // modifies original object
但试图在类似函数中重新定义异议根本不起作用:

var person2 = {
  name: 'Ashley',
  age: 26
};

function personRedefiner (obj, name, age) {
  obj = {
    name: name,
    age: age
  };
}

personRedefiner (person2, 'Joe', 21); // original object not changed
第二个示例不修改原始对象。我必须更改函数以返回对象,然后设置person2=personRedefiner(person2,'joe',21)


为什么第一个示例有效,而第二个示例无效?

在第二个示例中,您是一个新对象,其作用域位于函数的本地。

使用诸如“javascript按引用传递值”之类的关键字进行谷歌搜索。基本上,在第一个示例中,
obj
被传入,函数修改obj的内部。在第二个示例中,您正在更改
obj
本身,这只会在函数内部产生效果。