// 函数的参数是对象时 传递的是副本
function test(persion){
persion.age=26;
persion={
name:'yyy',
age:30
}
return persion
}
const p1={
name:'wky',
age:25
}
const p2=test(p1);
console.log(p1); // p1={ name:wky,age:26}
console.log(p2);// p2 ={name:'yyy',age:30}
在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。
和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,new Symbol()**以及对象变量的指针,这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等。
test(p1)时,p1作为参数,其实传递的也就是p1的指针。
当执行到persion.age=26时,因为指向的都是一个堆内存,所以p1.age=26,副本的age也是26
当执行到 persion={name:'yyy',age:30 },相当于给p1的副本(指针)从新赋值,指向了新的堆内存,也就是p2指向了新的堆内存