对于javascript函数传递参数的问题,到底是值传递还是引用传递!
栗子1:
function setName(obj){
obj.name="Nicholas";
}
var person = new Object();
setName(person);
理解:person 和 obj指向都是同一个对象,也就是堆内存中地址,当修改其属性name的值时,
同时外部的person也同时反映出来。
栗子2:
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对象不起作用。
结论:
在javascript中参数传递没有引用传递,只有值传递。
基本类型中:只是复制值,当变量1把值赋值给另一个变量2时,把变量1值复制一份给变量2,
而这两个变量不是同一个变量,而是不同变量。只是一样的值而已。
引用类型中:无非就是两种情况
① 参数被修改指向新的对象,此情况下当然参数已指向新的对象,再修改其属性方法与参数传入的对象无关,也就是原对象的变量不受影响。
② 修改传入的对象的某个属性或方法,此情况下,就是就是在修改原引用类型的变量的属性和方法。

浙公网安备 33010602011771号