Javascript 传递空对象作为函数中的引用
为什么在下面的问题中我们会得到不同的产出 Q1 问题2Javascript 传递空对象作为函数中的引用,javascript,Javascript,为什么在下面的问题中我们会得到不同的产出 Q1 问题2 这两者之间有什么区别,为什么在第二种情况下它会打印一个空对象。在Q1中,foo持有引用,这就是为什么变化会反映在所有地方 但是在Q2中,您重新初始化了传递的变量,该变量删除了以前的引用并分配了一个新的引用 这就是为什么Q2打印为空,并且在传递之前abc是一个空对象,在传递到一个方法之后没有改变它。阅读逗号行以理解它 Q1 问题2 在第二种情况下,x和abc是不同的。abc没有引用x。用新值覆盖函数参数(x)不会影响函数外的世界。你应该尽量避
这两者之间有什么区别,为什么在第二种情况下它会打印一个空对象。在
Q1
中,foo
持有引用,这就是为什么变化会反映在所有地方
但是在Q2
中,您重新初始化了传递的变量,该变量删除了以前的引用并分配了一个新的引用
这就是为什么
Q2
打印为空,并且在传递之前abc
是一个空对象,在传递到一个方法之后没有改变它。阅读逗号行以理解它
Q1
问题2
在第二种情况下,
x
和abc
是不同的。abc
没有引用x
。用新值覆盖函数参数(x
)不会影响函数外的世界。你应该尽量避免这样做。谢谢anik,我得到了答案
function foo(x){
x.x=20;
}
var abc= {};
foo(abc);
console.log(abc);// prints an object with x=20
function foo(x){
x={
y:10
};
}
var abc= {};
foo(abc);
console.log(abc);// prints an empty object
function foo(x){
x.x=20;
}
var abc= {};
foo(abc); //foo set abc.x=20
console.log(abc);
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);