栗子1:javascript
function setName(obj){
obj.name="Nicholas";
}
var person = new Object();
setName(person);
理解:person 和 obj指向都是同一个对象,也就是堆内存中地址,当修改其属性name的值时,java
同时外部的person也同时反映出来。spa
栗子2:code
function setName(obj){ obj.name="Nicholas"; obj = new Object(); obj.name="jack"; } var person =new Object(); setName(person); console.log(person.name);//Nickolas
理解:obj =new Object();对象从新指向一个新的对象,因此这样时候,不在是原来的person的对象,对象
因此在修改了其name时,对于原person对象不起做用。blog
结论:ip
在javascript中参数传递没有引用传递,只有值传递。内存
基本类型中:只是复制值,当变量1把值赋值给另外一个变量2时,把变量1值复制一份给变量2,io
而这两个变量不是同一个变量,而是不一样变量。只是同样的值而已。console
引用类型中:无非就是两种状况
① 参数被修改指向新的对象,此状况下固然参数已指向新的对象,再修改其属性方法与参数传入的对象无关,也就是原对象的变量不受影响。
② 修改传入的对象的某个属性或方法,此状况下,就是就是在修改原引用类型的变量的属性和方法。