四、1、函数参数是按值传递还是按引用传递

参考链接:https://www.zhihu.com/question/27114726

http://bosn.me/js/js-call-by-sharing/  

  基本类型在函数参数中肯定是按值传递,重点是引用类型按什么传递?高程中给出的是不管是基本类型还是引用类型在函数参数中都是按值传递。但是出现了以下这种情况:

function setName(obj){
	obj.name="Nicholas";
	obj=new Object();
	obj.name="Greg";
}
var person=new Object();
	setName(person);
	alert(person.name);

其中弹出的person.name为"Nicholas"。我开始的理解是,函数将person对象作为参数传递进去,是将person本身的值(person的值就是一个地址指针)赋值给了obj,obj有了和person一样的指针,也是指向同一个对象。修改obj的name,一是修改了对象的name值,person的指针指向的对象也会是修改值后的对象。

然后重写了obj这个变量,我觉得也会影响到它指针指向的这个对象。其实不是,obj被重新赋值新对象后,他的指针就变成了指向新的对象的指针,和person的指针没关系了。

看的资料里面将引用类型的参数传递成为按共享传递,其实我觉得按共享传递也是属于按值传递的一个范畴。只是这个引用类型传递给参数的是指针,而不是传递了整个对象进去,指针就是他们的值。当被传递指针的参数重新被赋予了新对象时,他的指针就变了指向新对象了,和当初指针就没有关系了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值