代码之家  ›  专栏  ›  技术社区  ›  HeatfanJohn Parkofadown

为什么在这个代码片段中要修改我的输入参数?[副本]

  •  -1
  • HeatfanJohn Parkofadown  · 技术社区  · 5 年前

    为什么是我的输入参数 inArr 在更新局部变量时被修改 arr 在下面的JavaScript代码中?

    function test(inArr) {
        var arr = inArr;
    
        for (let i = 0; i < 3; i++) {
            arr.push(i);
            console.log( "arr = ", arr, "inArr = ", inArr );
        }
    }
    
    test([]);

    这将输出:

    arr =  [ 0 ] inArr =  [ 0 ]
    arr =  [ 0, 1 ] inArr =  [ 0, 1 ]
    arr =  [ 0, 1, 2 ] inArr =  [ 0, 1, 2 ]
    
    2 回复  |  直到 5 年前
        1
  •  0
  •   Ed Lucas bits-and-bytes    5 年前

    JavaScript数组是通过引用分配的,因此在进行分配时,两个变量都指向内存中的同一个数组。对一个的任何改变也会改变另一个。

    可以使用spread运算符创建具有这些值的新数组:

    var arr = [...inArray];
    
        2
  •  -1
  •   Mauricio    5 年前

    function test(inArr) {
        var arr = [].concat(inArr);
    
        for (let i = 0; i < 3; i++) {
            arr.push(i);
            console.log( "arr = ", arr, "inArr = ", inArr );
        }
    }
    
    test([]);