引用类型作为函数参数何解

在向函数传递引用类型的参数时,相当于把引用类型的地址复制给函数内的一个局部变量,所以局部变量和传入的参数会指向内存中的同一个对象。  局部变量的变化也会映射到传入参数

function setAge(obj){
  obj.age = 20;      
}
var person = new Object();
setAge(person);
console.log(person.age); // 20

解释: 我们创建了person对象,但是我们创建的person并没有age属性,然后我们通过setAge方法给函数内的局部变量obj添加了age属性,但是函数内局部变量obj的变化会映射到传入参数,这说明两者在都指向内存中的同一个地址。

然而引用类型作为参数传递并不说明引用类型传参是按引用传参的

function setAge(person){
  obj.age = 20;
  obj = {
     age: 30
  };
}
var person = new Object();
setAge(person);
console.log(person.age); // 20

解释:我们在函数内让person重新指向一个新的对象,等于切断了函数内局部变量obj与传入参数person的联系,即局部变量指向一个新的地址。

如果是按引用类型传递的话,那么全局变量person就会与局部变量obj指向同一个地址,那么person.age也应为30,由于不是按引用传递的,所以全局变量person还是指向原来的地址

 

参考自: JavaScript高级程序设计第3版

转载于:https://www.cnblogs.com/jhaosun/p/params.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值