参考链接:https://www.zhihu.com/question/27114726
http://bosn.me/js/js-call-by-sharing/
基本类型在函数参数中肯定是按值传递,重点是引用类型按什么传递?高程中给出的是不管是基本类型还是引用类型在函数参数中都是按值传递。但是出现了以下这种情况:
function setName(obj){
obj.name="Nicholas";
obj=new Object();
obj.name="Greg";
}
var person=new Object();
setName(person);
alert(person.name);
其中弹出的person.name为"Nicholas"。我开始的理解是,函数将person对象作为参数传递进去,是将person本身的值(person的值就是一个地址指针)赋值给了obj,obj有了和person一样的指针,也是指向同一个对象。修改obj的name,一是修改了对象的name值,person的指针指向的对象也会是修改值后的对象。
然后重写了obj这个变量,我觉得也会影响到它指针指向的这个对象。其实不是,obj被重新赋值新对象后,他的指针就变成了指向新的对象的指针,和person的指针没关系了。
看的资料里面将引用类型的参数传递成为按共享传递,其实我觉得按共享传递也是属于按值传递的一个范畴。只是这个引用类型传递给参数的是指针,而不是传递了整个对象进去,指针就是他们的值。当被传递指针的参数重新被赋予了新对象时,他的指针就变了指向新对象了,和当初指针就没有关系了。