有人能说清楚这种行为吗?如何作为新的对象实例私下处理?感谢
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场景中,如果实例不是隔离/新的,则这些对象可以被不同的用户入口点更改。这个想法?
答案 0 :(得分:0)
当您将变量a
作为参数发送给函数时,它不是a
中发送给函数的对象的副本,而是对对象的引用
函数中的参数obj
将是对变量a
指向的同一对象的引用。当您在函数中更改obj
时,更改会影响对象本身。稍后使用变量a
查看对象时,您会看到更改。