JS传递参数

zhiwu / 2023-08-23 / 原文

JS传递参数

ECMAScript中在向参数传递基本类型的值时,被传递的值会被赋值给一个局部变量(即命名参数,或者用ECMAScript的概念来说,就是arguments对象中的一个元素)。

在向参数传递引用类型值时,会把这个值在内存中的地址赋值给一个arguments的一个(局部)变量,因此这个局部变量的变化会反应在函数的外部。这里引申出两种情况:

  1. 修改这个参数的属性,会作用于全局。
  2. 修改这个参数的引用(将这个参数赋值为新值或者新对象),不作用于全局,因为改变了引用的地址。
function setName(obj){
    obj.name = "gtt";
    obj = new Object();
    obj.name = "zyk";
}

var person = new Object();
setName(person); // "gtt"