《JS高级程序设计》书中说ECMAScript中所有函数的参数都是按值传递。
这个值的含义其实包括基本值和地址值。
基本类型的值的传递很容易理解,就是把值从一个变量复制到另一个变量上。而引用类型的值,传递的是他的地址值。
function setName(obj) {
obj.name = "zhangsan"
}
var person = new Object();
setName(person);
console.log(person.name); //zhangsan
书中用下面这个例子证明引用类型的值也是值传递而不是引用传递
function setName(obj) {
obj.name = "zhangsan";
obj = new Object();
obj.name = "lisi";
}
var person = new Object();
setName(person);
console.log(person.name); //zhangsan
obj被设置为一个新对象后,person的指针指向的对象没变,person.name还是zhangsan,只是obj自己指向了一个新的对象地址。