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
相关分类