首页 > 求证明js的参数是按照值传递的?

求证明js的参数是按照值传递的?

function f(agr){
    //do
}

Plz,证明:不管是对象,还是基本类型,传递给agr的时候,都是值而非引用传递。


对象是引用传递的


楼上回答了证明,我补充下原理。。。
证明:

var a = new Object();//堆内存中第一个对象,其实例为a
a.name= "1234";
var b = new Object();//堆内存中第二个对象,其实例为b
b.name = "5678";
function f(arg){
arguments[0] = a;//将参数arg所指向的对象传递为堆内存中第一个对象
console.log(arg.name);
}
f(b);//结果为1234
/*为堆内存中第一个对象的name属性
如果argument参数以引用传递,此时b所指向的对象应该为堆内存中第一个对象。*/
console.log(b.name);//结果为5678,
/*b所指向的对象却仍为堆内存中第二个对象
说明arguments[0] = a;这次传递为值的传递
*/

证毕


基本类型-字符串

var a="1234";
function f(paraInput){
    paraInput="5678";
    console.log(paraInput);
}
f(a);//5678
console.log(a);//1234

对象obj

var a={
value:'1234'
};

function f(paraObj){
    paraObj ={
     value:"5678"
    };
    console.log(paraObj.value);
}

f(a);//5678
console.log(a.value);//1234
【热门文章】
【热门文章】