在参数传递中,不分基本,引用数据类型。都是以值直接进行传递的。如下典型例子。

<!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);

原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/10606378.html