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

3

我无法理解为什么我的函数不能改变全局变量(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个回答

8

主要的混淆源在于你的函数参数名称和全局数组名称发生了冲突。

你并没有修改全局数组,而是修改了那个函数内部的局部数组。

现在你有两个选择。

1)接收修改后的数组

reverseArrayInPlace(arrayValue);

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

arrayValue  = reverseArrayInPlace(arrayValue);

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


2

你提出的问题主要在于,你将函数中的参数(名为arrayValue)与全局变量(同样命名为arrayValue)混淆了。

如果给你的函数添加另一个参数,你就能很容易地看出这一点:

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

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

请注意,在这段代码中,函数没有返回任何东西(实际上它返回的是 undefined),只是改变了全局变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接