js中对象参数传递都是按值传递,当参数为对象时,传递的是对象的引用地址,函数中改变对象参数的值时,会影响函数外的该对象。但为对象参数重新赋值时,相当于改变了其引用地址,将其指向了其它内存地址,故自然不会影响函数外的同名对象。
示例1:函数内改变对象参数的值,会影响到函数外该对象
var person = {
name: "Lucy"
}
function fn(obj){
obj.name = "Lilei"
}
fn(person);
console.log(person.name); // 输出结果:Lilei
示例2:函数内改变数组参数的值,会影响到函数外该对象
var colors = ["red"];
function fn(arr) {
arr[0] = "green"
}
fn(colors);
console.log(colors); // 输出结果:["green"]
示例3:函数内为对象参数重新赋值,不会影响函数外对象
var colors = ["red"];
function fn(arr) {
arr = ["yellow"]
}
fn(colors);
console.log(colors); // 输出结果:["red"]