js函数传参,按值传递,按引用传递

151 阅读1分钟

按值传递

函数的形参是所传实参的拷贝值,形参的值发生改变不会影响实参。

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