关于"ECMAScript中所有函数的参数都是按值传递的"

JS高级程序设计—> 4.1.3中提到:
“ECMAScript中所有函数的参数都是按值传递的”

为了证明这个论点,举了一个例子:

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

var person = new Object(); 
setName(person); 
alert(person.name); //"Nicholas" 

刚开始不能理解为什么给obj加属性可以改变person但是给obj重新赋值这步操作却不会影响person. 后来在老师的视频中勉强找到一点灵感,图解如下.
函数参数都是按值传递的
最关键的一步在于, obj.name = “Nicholas”"; 对person做了什么?

目前我的理解是, 由于obj和person是对象,即引用类型,具有值类型没有的特性, 比如说属性, 给对象添加属性并不能 与 给变量重新赋值混为一谈,这一步操作是引用类型特有的, 只有在涉及赋值等简单类型操作的时候,才能体现参数的传递到底是按值还是按引用来的. 听起来好像有点牵强,但是很合理啊,哈哈哈哈~~~~ 日后我要是有了更深入的理解,再来更新

所以说,从obj = new Object(); 这一步并没有使得person的name属性变成"Greg"来说,函数的参数是按值传递的. 书中说的那一大堆就可以解释了.

2019/04/30			<原创,禁止转载> 				
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值