前端面试时遇到一道JavaScript题
function test(person) {
person.age = 26
person = {
name: 'hzj',
age: 18
}
return person
}
const p1 = {
name: 'lje',
age: 19
}
const p2 = test(p1)
console.log(p1) // -> ?
console.log(p2) // -> ?
运行结果:
p1:{ name: ‘lje’, age: 26 }
p2:{ name: ‘hzj’, age: 18 }
理解:
函数传参时传递的是对象在堆中的内存地址,p1 作为 test() 参数,此时 p1 和 person 指向同一个地址,所以 person.age 会改变 p1.age 的值。而变量 p2 保存的是 person 被重写的指针。