【问题标题】:Javascript reference vs value - arrays [duplicate]Javascript参考与值-数组[重复]
【发布时间】:2019-12-26 21:55:32
【问题描述】:

由于数组是通过引用传递给函数的,当我将数组设置为等于函数内部的其他值,并尝试再次将其记录到函数外部时,为什么即使我修改了它,值仍然保持不变在函数中?

let arr = [1, 2];
console.log(arr); // Logs [1, 2]
add(arr, 3)
console.log(arr); // Logs [1, 2] again

function add(array, el)
{
    array = [el];
    console.log(array); // Logs [3]
}

为什么调用add后的console.log退出[1, 2]而不是[3](即el参数的值)?

【问题讨论】:

  • 因为函数内部对array的赋值是对局部变量的赋值,而不是相对全局的array。

标签: javascript arrays


【解决方案1】:

您没有修改数组。

您正在更改array 变量的值(从对旧数组的引用变为对新数组的引用)。

为了比较,如果要修改现有数组:

let arr = [1, 2];
console.log(arr);
add(arr, 3)
console.log(arr);

function add(array, el) {
  array.length = 0;
  array.push(el);
  console.log(array);
}

【讨论】:

    【解决方案2】:

    您混淆了数组的范围。

    当您将数组传递给函数并将该变量设置为等于其他类似的值时;

    function add(array, el)
    {
      array = [el];
    }
    

    您只是将变量设置为等于其他值,而不是修改数组。如果要修改数组,可以执行以下操作:

     function add(array, el)
     {
        array[0]=el; // changing the first element to 3
     }
    

    现在您将看到数组的第一个元素更新为 3。这就是更新数组的工作原理。

    如果您希望数组是一个全新的数组,您可以执行以下操作:

    arr = add(arr, 3);
    
    function add(array, el)
    {
      array = [el];
      return array;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 2023-03-28
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多