1

任何人都可以阐明这种行为吗?以及如何将 a 作为新对象实例私下处理?谢谢

var a = {};

var b = function(obj) {
  obj.z = 10;
  return obj;
};

console.log("---");
console.log(a); // a = {}
b(a);
console.log(a); // a = {z: 10} -- why is a affected? it's not a = b(a);
(function(obj){
  obj.x = 9;
  console.log(obj);
})(a);
console.log(a); // a = {z:10, x: 9} -- a is also manipulated, why?

编辑:对象是通过引用访问的,因此“a”会受到全局影响。问题是,在 Node.js 场景中,如果实例不是隔离/新的,则这些对象可能会被不同的用户入口点更改。对此有何想法?

4

1 回答 1

0

当您将变量a作为参数发送给函数时,发送a给函数的不是对象的副本,而是对该对象的引用。

函数中的参数obj将是对变量a指向的同一对象的引用。当您更改obj函数时,更改会影响对象本身。当您稍后使用该变量a查看对象时,您会看到更改。

于 2013-05-24T07:21:16.020 回答