为什么要操纵这个javascript对象?

时间:2013-05-24 07:15:28

标签: javascript

有人能说清楚这种行为吗?如何作为新的对象实例私下处理?感谢

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场景中,如果实例不是隔离/新的,则这些对象可以被不同的用户入口点更改。这个想法?

1 个答案:

答案 0 :(得分:0)

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

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