关于javascript的一个面试题

代码如下:

const squares = Array(3).fill(Array(3).fill(null));
squares[0][0] = 1
console.log(squares) 

打印结果是什么?
我开始的答案是:

[[null,null,null],[null,null,null],[null,null,null]]

但是真实答案是:

[[1,null,null],[1,null,null],[1,null,null]]

为什么?难道是fill函数会保存执行结果吗?不是太理解
万望解惑

阅读 310
评论
    3 个回答

    看了这个问题去找了一下 MDN里面 array.fill的用法

    fill 方法是个可变方法, 它会改变调用它的this对象本身, 然后返回它, 而并不是返回一个副本。

    当一个对象被传递给fill方法的时候, 填充数组的是这个对象的引用。

    所以应该都是同一个引用了,借助问题学习了一波~