<!DOCTYPE html>
<html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <script type="text/javascript"> function setName(obj){ obj.name="xm"; //这里的obj和下面obj={},点关系没有,因为 obj={},重新创建一个堆内存空间。这里的obj={},可以看做是anthorObj。这样就容易懂了。 obj={}; //以后看到这个,就是重新再开辟一个新的堆内存空间,跟上面一点关系没有。说白了就是第二个对象。这里的obj是新的引用地址,新的堆内存空间。这里的obj可以看成anthorOjb。 obj.name="xh"; }; var person={}; setName(person); document.write(person.name); </script></body></html>---------------
输出结果为:xm,而不是xh
解析:
如上代码执行到setName(person)时,可以解析为如下:
function setName(person){ person.name="xm"; // person={}; //使用变量person重新再开辟一个堆内存空间,这里的person可以看成是anthorPerson,跟上面的person一点关系没有。所以在下面执行document.write时,只读取上一行的,person.name=“xm”,跟下面重新创建person={}对象一点关系没有。 person.name="xh";};即:document.write(person.xh);