function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"person是一个带有指向new Object的地址的栈,new Object是一个堆,obj是本地参数,setName(person) 意思是 本地参数obj=person,成为具有相同值和地址的栈,也指向new Object,在函数内部它的person.name='Nicholas',根据地址指向在new Object内保存了属性,person=new Object(),函数内新建立了一个new Object的堆,此时person指向发生了改变,新的obj.name指向新的new Object,因此在obj = new Object()时原指向已经失效,所以alert(person.name)弹出的是'Nicholas'.以上是我个人的理解,不知道对不对,还有应该怎么调用新堆中的name属性?
3 回答
qq_青枣工作室_0
TA贡献446条经验 获得超754个赞
理解的对。obj = new Object()时,obj的原指向已经失效。但是,person依然在指向着。
要调用局部变量里新堆的name属性,可以return obj;
或者,用一个全局变量来指向它 window.newObj = obj;
或者,直接用外部变量person指向它 person = obj;
添加回答
举报
0/150
提交
取消