按值传递
函数的形参是所传实参的拷贝值,形参的值发生改变不会影响实参。
let a=1;
function foo(a){
a=2;
console.log(a); // 2
}
foo(a);
console.log(a); // 1
按引用传递
函数的形参是所传实参的隐式引用,形参的值发生改变会影响实参。
var obj1={name:"lisa"};
var obj2={name:"jennie"};
function foo(obj){
obj.name="huahua";
obj=obj2;
console.log(obj.name); // jennie
}
foo(obj1);
console.log(obj1.name); // huahua
栈——> 堆
obj1——> name:"lisa"
obj2——> name:"jennie"
函数执行后
obj/obj1——> name:"huahua"
obj——> name:"jennie"
js传参是按值传递
function setValue(obj) {
obj.name = "111";
var obj = new Object();
obj.name = "222";
return obj;
}
let newObj = new Object();
newObj.name = "333";
let result = new setValue(newObj);
console.log(newObj.name); // 111
console.log(result); // {name:"222"}
console.log(result.name); // 222