关于函数参数传递的类型思考

256 阅读1分钟

最近在看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

还望解惑