这两个简单的例子是我在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
在第二个示例中不被覆盖?
答案 0 :(得分:1)
参数obj
是与o
分开的变量。调用函数时,它会收到p
值的副本。更改obj
的值不会影响o
。
JavaScript纯粹是一种按值传递的语言。无法为JavaScript变量创建别名,因此调用函数无法修改调用环境中变量的值。
答案 1 :(得分:1)
在这两个示例中,您都会传递对象的引用副本,而不是对象本身
在示例1中,您可以更改对象中的内容,很好 在函数中的示例2中,您更改了引用本身,它现在指向除原始对象之外的其他内容,在函数之外,引用仍然是相同的
这是传递值v通过引用传递
答案 2 :(得分:0)
在您的函数foo中,当您设置obj = {}
时,您正在更改obj
引用的引用。但你没有改变o
引用的内容。