一个关于数组的问题

        function makeRow(v=0){
            const array = new Array(3);
            array.fill(v);
            return array;
        }

        function makeMatrix(v = 0){
            const array = new Array(3)
            array.fill(makeRow(v))

            return array;
        }

        const a = makeMatrix()
        a[0][1]=2
        console.log(a)
        /*
        [
          [0,2,0],
          [0,2,0],
          [0,2,0]
        ]
        */
        

如上代码,为什么我只操作了 a的第0项,但结果是每项都被改变了
求大神解答

阅读 1.7k
2 个回答

数组是引用类型。makeRow(v)返回的实际上是const array = new Array(3);这个array在内存中的地址,fill方法将这个地址取了三遍,所以无论改哪个,3个都会改变。

因为你只makeRow了一次,矩阵中的每一“行” 都引用了同一个数组,你改矩阵中的值就相当于改 “行” 中的一个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题