javascript 传递引用类型参数

JavaScript代码如下:

function setName(obj){ 
obj.name = "test1"; 
obj = new Object(); 
obj.name
= "test2"; } var person = new Object(); setName(person); alert(person.name);

运行结果:页面弹出“test1”

代码分析:为什么不弹出“test2”?

 var person = new Object();    本例中首先生成一个object对象,并将person(类似于指针)指向这个object对象,暂时将这个object对象命名为objectA:person->objectA

 setName(person);   将person作为参数传递给setName函数,传递的其实是objectA在内存中的地址,此时函数体中obj就是一个引用类型,指向内存中的objectA对象:obj->objectA,person->objectA

setName()函数体中:

{

      代码第一行:obj.name = "test1";     等价于objectA.name=“test1”;   此时obj.name=person.name=“test1”

      代码第二行:obj = new Object();      这一句是关键,obj指向了一个新的对象new Object(),暂时命名为objectB,此时obj->objectB,person->objectA

      代码第三行:obj.name = "test2";     等价于objectB.name=“test2”,此时person指向的对象ObjectA的name属性仍然为"test1"

}

原文地址:https://www.cnblogs.com/king1302217/p/3282627.html