0

我的问题可以简化为这段微不足道(或看起来如此)的代码

var myArray = [1,2];
function addOnetoArrayElement(element){
element +=1;
console.log(element);     // Returns 3
}

addOnetoArrayElement(myArray[1]);
console.log(myArray[1]);  // Returns 2 

我发现可以对数组执行各种操作,如 map、reduce、推送到数组,但完全没有参考对数组元素进行简单的算术运算,这一点令人着迷。不要介意所有关于提升、范围、按值传递和引用的东西。我敢肯定,也许有一天我会知道足够多的知识来为这个演讲做出贡献。我必须做什么才能使 myArray[1] = 3?

4

1 回答 1

0

您假设myArray[1]它将以可以修改该元素的方式传递给函数myArray(所谓的引用)。

但是myArray[1]只是一个数字,它是一种原始类型,并且是按值传递的。这意味着一个副本被传递给与 没有连接的函数myArray。因此,对elementparam 的修改不会改变myArray(请参阅docs)。

原始参数(如数字)按值传递给函数;值被传递给函数,但是如果函数改变了参数的值,这种改变不会在全局或调用函数中反映出来。

作为参考,JS中只有 7种原始数据类型:string、number、bigint、boolean、undefined、symbol 和 null。

为了解决这个问题,我们需要将整个myArray函数作为第一个参数(通过引用,因为它是一个Array)传递给函数,并将索引作为第二个参数。在这种情况下myArray,将通过引用传递,函数将能够对其进行修改。

var myArray = [1,2];
function addOnetoArrayElement(arr, ind){
  arr[ind] += 1;
  console.log(arr[ind]);     // Returns 3
}

addOnetoArrayElement(myArray, 1);
console.log(myArray[1]);  // Returns 3 
于 2021-02-27T01:39:57.490 回答