Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递空对象作为函数中的引用_Javascript - Fatal编程技术网

Javascript 传递空对象作为函数中的引用

Javascript 传递空对象作为函数中的引用,javascript,Javascript,为什么在下面的问题中我们会得到不同的产出 Q1 问题2 这两者之间有什么区别,为什么在第二种情况下它会打印一个空对象。在Q1中,foo持有引用,这就是为什么变化会反映在所有地方 但是在Q2中,您重新初始化了传递的变量,该变量删除了以前的引用并分配了一个新的引用 这就是为什么Q2打印为空,并且在传递之前abc是一个空对象,在传递到一个方法之后没有改变它。阅读逗号行以理解它 Q1 问题2 在第二种情况下,x和abc是不同的。abc没有引用x。用新值覆盖函数参数(x)不会影响函数外的世界。你应该尽量避

为什么在下面的问题中我们会得到不同的产出

Q1

问题2


这两者之间有什么区别,为什么在第二种情况下它会打印一个空对象。

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);