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