帮我看看js引用类型吧

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属性?

清风流光
浏览 1550回答 3
3回答

qq_青枣工作室_0

理解的对。obj = new Object()时,obj的原指向已经失效。但是,person依然在指向着。要调用局部变量里新堆的name属性,可以return obj;或者,用一个全局变量来指向它 window.newObj = obj;或者,直接用外部变量person指向它 person = obj;
打开App,查看更多内容
随时随地看视频慕课网APP