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 <原创,禁止转载>