为什么这个对象不被覆盖?

时间:2015-04-13 14:01:23

标签: javascript

这两个简单的例子是我在javascript中解释对象的。我理解第一个例子,但是我想到的是为什么第二个(高度相似)的例子o没有被空对象覆盖?

function foo(obj) {
    obj.x = 7;
}
var o = {x: 5};
foo(o);
console.log(o.x); // 7

在我看来,在以下示例中,应记录undefined:

function foo(obj){
   obj = {};
}
var o = {x: 5};
foo(o);
console.log(o.x); // 5

但它不是,怎么回事?这两个示例有什么区别,导致o在第二个示例中不被覆盖?

3 个答案:

答案 0 :(得分:1)

参数obj是与o分开的变量。调用函数时,它会收到p值的副本。更改obj的值不会影响o

JavaScript纯粹是一种按值传递的语言。无法为JavaScript变量创建别名,因此调用函数无法修改调用环境中变量的值。

答案 1 :(得分:1)

在这两个示例中,您都会传递对象的引用副本,而不是对象本身

在示例1中,您可以更改对象中的内容,很好 在函数中的示例2中,您更改了引用本身,它现在指向除原始对象之外的其他内容,在函数之外,引用仍然是相同的

这是传递值v通过引用传递

答案 2 :(得分:0)

在您的函数foo中,当您设置obj = {}时,您正在更改obj引用的引用。但你没有改变o引用的内容。