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

function f(agr){
    //do
}

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

阅读 2.7k
4 个回答

基本类型-字符串

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

对象是引用传递的

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

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;这次传递为值的传递
*/

证毕

值传递。它的值是指针

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题