所有函数的参数都是按值传递的
【复制变量值】复制基本类型变量的值,会在该变量对象上创建一个新值,然后把该值复制到新变量分配的位置上。任一变量值操作互不影响。
【复制引用指针】复制引用类型变量的值,同样会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是这个值的副本实际上一个指针,而这个指针指向存储在堆中的一个对象。复制后,两个变量实际上将引用同一个对象。因此,改变任意变量,都会影响另一个变量。
有个误区就是 传递对象时修改了对象的属性,函数外部的对象也会有相应的修改,就误认为是按照引用传递的
function setAge(obj) {
obj.age = 10;
}
let obj = {};
setAge(obj);
console.log(obj); // {age: 10}
1561025017(1).png
当把参数重新定义为一个新的对象时,这时外部obj.age的值不会改变,因为函数内的obj定义为新对象时,会为这个对象在堆中分配一个空间,并将内部的obj指向新的对象
function setAge(obj) {
obj.age = 10;
obj = {};
obj.age = 100;
}
let obj = {};
setAge(obj);
console.log(obj); // {age: 10}
1561026033(1).png
高程三的原话是这样的:
1641127494-55cdb2570cba9_articlex.png
自己的理解, 如果有错误的地方,希望指出
网友评论