js传递参数问题

在js中传递参数都是按值传递的。

例一:

function addTen(num){
  num+=10;
  return num;
}
var count=20;
var result=addTen(count);
alert(count); //20 没有变化
alert(result); //30

对于基本数据类型count 将值复制给参数num。以便在函数内部使用, 此时在内存栈中同时有两块内存分别为count和num,而且两块内存没有任何关系,只是两块内存中的值都是20; num加上10变为30,而count却不会产生变化。相信上面的大家都懂。 但是对于引用类型情况又是怎么样的呢?

例二:

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

此时创建了一个对象并将值放在了person变量中。这个对象被传递到setName函数之后就复制给了obj。在函数内部obj和person引用的是同一对象所以说当函数内部的obj的属性发生变化时肯定会反映到person,此时貌似解释为按引用传递也是行得通的。请看下面:

例三:

function setName(obj){
       obj.name="yuanfang";
       obj = new Object();
       obj.name="yuanfang1";
}
var person = new Object();
setName(person);
alert(person.name) // yuanfang

如果是引用传值的话obj和person指向同一个对象,当执行到obj.name="yuanfang"时,此时person.name="yuanfang"。 引用本质上就是别名;将一个新的对象赋予obj并且属性name变为"yuanfang1"。那么person也将随之改变。但是我们看到结果却是"yuanfang"。实际上当在函数内重写obj时,这个变量引用就是一个局部对象了。而这个局部对象将在函数执行完毕后立即被销毁。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值