簡體   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