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属性?
清风流光
qq_青枣工作室_0
随时随地看视频慕课网APP
相关分类