首页 > 解决方案 > 我如何理解传递一个对象并在 Javascript 中的函数中更改它?

问题描述

我了解对象是如何在 Javascript 中通过引用传递的。在以下代码中,我的函数更改了对象的属性。它按预期在全局范围内发生变化。我明白了。

let a = {name:'blah1'};

function something(obj1) {
  obj1.name = 'blah2';
  console.log(obj1);  // prints {name:'blah2'}
}

something(a);
console.log(a); // prints {name:'blah2'}

在下面的代码中,我宁愿将另一个对象传递给我的函数,并使我的第一个对象等于第二个。这次它在全局范围内没有变化。我怎么能理解这个?

let a = {name:'blah1'};
let b = {name:'blah2'};

function something(obj1, obj2) {
  obj1 = obj2;
  console.log(obj1); // prints {name:'blah2'}
}

something(a,b);
console.log(a); // prints {name:'blah1'}

标签: javascriptjson

解决方案


obj1和的范围obj2仅限于功能,something。换句话说,以下执行的范围仅限于函数,something

obj1 = obj2;

在函数中,obj1现在将引用正在引用的同一对象,obj2因此现在您可以使用obj1例如对该对象进行更改

let a = {name:'blah1'};
let b = {name:'blah2'};

function something(obj1, obj2) {
  obj1 = obj2;
  console.log(obj1); // prints {name:'blah2'}
  obj1.name='Ravish';
}

something(a,b);
console.log(a); // prints {name:'blah1'}
console.log(b) // prints {name:'Ravish'}

但在函数之外,这些引用(即obj1obj2)不存在;这就是为什么console.log(a)打印{name:'blah1'}


推荐阅读