对于javascript函数传递参数的问题,究竟是值传递仍是引用传递!

栗子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

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

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

相关文章
相关标签/搜索