知食记
搜索文档…
引用传参

引子

1
function test(person) {
2
person.age = 26
3
person = {
4
name: 'hzj',
5
age: 18
6
}
7
return person
8
}
9
const p1 = {
10
name: 'fyq',
11
age: 19
12
}
13
const p2 = test(p1)
14
console.log(p1) // -> ?
15
console.log(p2) // -> ?
Copied!

解析

1
p1:{name: “fyq”, age: 26}
2
p2:{name: “hzj”, age: 18}
Copied!
原因: 在函数传参的时候传递的是对象在堆中的内存地址值,test函数中的实参person是p1对象的内存地址,通过调用person.age = 26确实改变了p1的值,但随后person变成了另一块内存空间的地址,并且在最后将这另外一份内存空间的地址返回,赋给了p2。
复制链接