传递一个空对象作为函数的引用

时间:2017-03-15 06:08:09

标签: javascript

为什么我们在下面的问题中得出输出差异?

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

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

2 个答案:

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