对于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,

而这两个变量不是同一个变量,而是不同变量。只是一样的值而已。

引用类型中:无非就是两种情况

① 参数被修改指向新的对象,此情况下当然参数已指向新的对象,再修改其属性方法与参数传入的对象无关,也就是原对象的变量不受影响。
② 修改传入的对象的某个属性或方法,此情况下,就是就是在修改原引用类型的变量的属性和方法。

posted @ 2017-03-13 16:57  鱿娱丝  阅读(141)  评论(0)    收藏  举报