Javascript - 有时可以修改传递给函数的数组

时间:2015-05-01 01:53:28

标签: javascript arrays reference

为什么第一个函数不像第二个函数那样修改原始数组?

var a= [3, 4, 5];
function doesNothing(a) {
    a=[1,1,1];
}

function doesSomething(a) {
    a.push(6);
}

doesNothing(a);
console.log(a);     // [3,4,5] not [1,1,1]
doesSomething(a);
console.log(a);     //[3,4,5,6]

2 个答案:

答案 0 :(得分:0)

因为在您的第一个函数中,语句a =在本地范围内初始化 new 变量(它实际上转换为var a =)与全局{{1}完全无关变量,而在第二个函数中,你正在调用并改变传入其中的原始数组。

答案 1 :(得分:0)

  1. 如果将a作为参数传递给函数,则它是局部变量,因此重置其值不会影响外部变量a。
  2. 但是使用使数组可变的方法将更改外部变量,例如pop()/ shift()/ push / splice ...,您也可以使用'。'。直接更改数组,例如:arr.length=0;; push()可以有多个参数,因此您可以:arr.push(...anotherArray)
  3. 如果未将a作为参数传递,而是直接从全局范围读取该函数,则重置值将直接更改该变量。 因此,请直接在函数内部读取它,不要将其作为参数传递。或将其作为参数传递,但要使用会使数组变异以更改其值的方法。
  4. 查看示例: pass as a param

read from outside directly