函数参数是对象发生什么问题:
新手很容易跌倒的坑
function fn(person) {
person.age = 26 // 修改了原对象的值
person = {
name: 'Jhon',
age: 30
}
return person
}
const person = {
name : 'Tom',
age: 25
}
const person2 = fn(person)
console.log(person, person2)
// out put => { name: 'Tom', age: 26 } { name: 'Jhon', age: 30 }
分析:
- 明确: 函数传参是地址
- 模拟浏览器: 声明了一个函数,生命力一个对象 定义了一个常量:person2 = fn(person)
- 从右向左运算 fn(person) => person是一个对象,对象便开辟了一块存储空间,放在堆中,然后存入了name: Tom,age=50 将person 地址为 &0x763; 传入fn
- 顺序执行fn 首先 0x763 => age =26;
- 再挂载一个 person 地址为 &0x7E; 然后初始化,然后返回。
- 拿 person2 接到了返回值,然后打印 其结果为{ name: ‘Tom’, age: 26 } { name: ‘Jhon’, age: 30 }