📅  最后修改于: 2023-12-03 15:25:53.640000             🧑  作者: Mango
在 Javascript 中,有时候我们需要传递一个对象作为参数给函数使用。但是,Javascript 中的传递对象的方式与其他编程语言有所不同,Javascript 采用的是按值传递方式。
按值传递,顾名思义,就是传递的是值,而不是对象本身。当我们传递一个对象时,实际上传递的是该对象的副本,而不是原始的对象。
function changeName(obj) {
obj.name = 'Lucy Smith';
obj = { name: 'John Doe' };
}
var person = { name: 'Bob' };
changeName(person);
console.log(person.name); // Lucy Smith
在上面的例子中,changeName
函数接受一个对象类型参数 obj
,并将其 name
属性值更改为 'Lucy Smith',紧接着又创建了一个新的对象 obj
,并将其 name
属性赋值为 'John Doe'。然后,我们将一个对象 person
传递给 changeName
函数,在函数中,我们更改了 person
对象的 name
属性,并将其赋值为 'Lucy Smith',但是 obj
对象所指向的新对象并没有被使用。
最后,当我们在控制台中打印 person.name
时,输出的结果是 'Lucy Smith',而不是 'John Doe',这是因为在传递对象时,传递的是该对象的副本,函数中的修改操作只会更改原始对象的副本,而不会更改原始对象本身。
在 Javascript 中,按值传递对象意味着传递的是该对象的副本,而不是原始对象本身。这意味着在函数内部对对象的修改不会影响原始对象本身。如果要修改原始对象,一种方法是直接操作原始对象(而不是其副本),另一种方法是将副本返回并将其赋值给原始对象。