最近在看js高级程序设计(第三版)里面解释函数参数类型传递有这样一句话 ECMAScript 中所有函数的参数都是按值传递的 然后有两个例子来说明两者的区别:
复制代码
function setName(obj) {
obj.name = "Nicholas";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"复制代码
看上去很像引用类型的传递,然后又一个例子解释:
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas" 复制代码
obj = new Object() 将指针指向了新的对象,原person应该还是指向原来的对象,此时perso.name = 'Nicholas' 当然成立,再对obj赋值又如何能证明函数参数传递是值传递?
相当于如下:
var person = new Object();
var obj = person;
obj.name = "Nicholas";
var obj = new Object();
obj.name = "Greg";
console.log(person.name) //Nicholas复制代码
还望解惑