js函数参数到底是按值传递还是引用传递

177 阅读1分钟

js函数参数到底是按值传递还是引用传递,今天终于搞明白了

`

   function setName(obj) {

        obj.name = "Nicholas";

        obj = new Object();

        obj.name = "Greg";
   }

   let person = new Object();

   setName(person);

   console.log(person.name); // "Nicholas"

`

此函数调用过程,将person传入函数setName,并复制给obj,person和obj指向同一内存地址。

person 传入 setName()时,其 name 属性被设置为"Nicholas"。然后变量 obj 被设置

为一个新对象且 name 属性被设置为"Greg"。如果 person 是按引用传递的,那么 person 应该自动将

指针改为指向 name 为"Greg"的对象。可是,当我们再次访问 person.name 时,它的值是"Nicholas",

这表明函数中参数的值改变之后,原始的引用仍然没变。当 obj 在函数内部被重写时,它变成了一个指

向本地对象的指针。而那个本地对象在函数执行结束时就被销毁了。