为什么我们在下面的问题中得出输出差异?
Q1
function foo(x){
x.x=20;
}
var abc= {};
foo(abc);
console.log(abc);// prints an object with x=20
Q2
function foo(x){
x={
y:10
};
}
var abc= {};
foo(abc);
console.log(abc);// prints an empty object
两者之间有什么区别,为什么在第二种情况下打印一个空对象。
答案 0 :(得分:3)
在Q1
中,foo
持有引用,这就是为什么更改反映在任何地方。
但在Q2
中,您重新初始化了传递的变量,该变量删除了先前的引用并分配了一个新引用。
这就是为什么Q2
打印为空并且在传递abc
之前是一个空对象,在传递给方法之后没有改变它。
答案 1 :(得分:1)
阅读赞成的行以理解
Q1
function foo(x){
x.x=20;
}
var abc= {};
foo(abc); //foo set abc.x=20
console.log(abc);
Q2
function foo(x){
x={
y:10
};
}
var abc= {};
foo(abc); //foo create a new object and assign it in x. So abc hold by x is overriden
console.log(abc);