繁体   English   中英

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

[英]Can't change global variable inside a function (Javascript)

我无法弄清楚为什么我的函数不会改变全局变量(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]

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

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

你现在有两个选择。

1)接收修改后的数组

reverseArrayInPlace(arrayValue);

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

arrayValue  = reverseArrayInPlace(arrayValue);

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 ),只是更改全局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM