无法在函数内更改全局变量(Javascript)

时间:2017-03-15 13:13:25

标签: javascript arrays global-variables

我无法弄清楚为什么我的函数不会改变全局变量(arrayValue) 它仅在函数内部进行更改,但我想在外部更改它。

function reverseArrayInPlace(arrayValue) {
  var newArr = [];
  for (var i = 0; i < arrayValue.length; i++) {
    newArr.unshift(arrayValue[i]);
  }
  arrayValue = newArr;
  return arrayValue;
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue); // It gives [1, 2, 3, 4, 5] instead of [5, 4, 3, 2, 1]
console.log(reverseArrayInPlace(arrayValue)); // It gives [5, 4, 3, 2, 1]

2 个答案:

答案 0 :(得分:8)

混淆的主要原因是您的函数的参数名称和全局数组名称发生冲突。

您没有修改全局数组,而是修改该函数的本地数组。

您现在有两种选择。

1)接收修改后的数组

reverseArrayInPlace(arrayValue);

该函数返回修改后的数组,但您没有收到它。因此它指向旧数组。

arrayValue  = reverseArrayInPlace(arrayValue);

2)具有函数参数和全局数组的唯一命名。

答案 1 :(得分:2)

你问题中的主要问题......

  

为什么我的函数不会改变全局变量?

...您错误地将您的函数中的参数(名为arrayValue)误认为是您的全局(也称为arrayValue)。

如果你给你的功能另一个参数,你可以很容易地看到这个:

&#13;
&#13;
function reverseArrayInPlace(arrValue) {
  var newArr = [];
  for (var i = 0; i < arrValue.length; i++) {
    newArr.unshift(arrValue[i]);
  }
  arrayValue = newArr;
}

var arrayValue = [1, 2, 3, 4, 5];

reverseArrayInPlace(arrayValue);

console.log(arrayValue);
&#13;
&#13;
&#13;

请注意,在此代码段中,该函数未返回任何内容(实际上它返回undefined),只是更改了全局。