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"
}