再次学习javascript中的参数传递

9 篇文章 0 订阅

 javascript中的所有函数的参数传递都是按照值传递的,做了下面测试:

  

function addTen(num){
	num +=10;
	return num;
}

var count = 20;
var result = addTen(count);
alert(cont);		//20
alert(result);	//30
  好吧,上面只是做了基本类型的传递,再做个引用类型的传递看看:

function setName(obj){
	obj.name="Mark";
}

var person = new Object();
setName(person);
alert(person.name);		//Mark
这样看起来是引用传递,不是值传递,那么再做个测试:

function setName(obj){
	obj.name="Mark";
	obj = new Object();
	obj.name = "David";
}

var person = new Object();
setName(person);
alert(person.name);		//Mark
这个例子与前面一个例子的唯一的区别就是在setName()的函数后面增加 了两行代码:一行代码为obj重新定义了个对象,另一行代码为该对象定义了一个带有不同值的name属性。在把persion传递给setName()函数后,其name属性被设置为Mark,然后将一个新对象赋值给obj,同时其name属性设置为David。如果person是按照引用传递的,那么person就会自动被修改为指向其name属性值为David的新对象。但是,当接下再访问person.name时,显示的值仍是Mark。这说明即使在函数内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数内部重写obj时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完后被销毁。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值