javascriptの配列初期化におけるナゾ

javascriptで以下の操作で2次元配列を生成すると、値の更新を行う際に列ごと更新がかかる。

let cost_array = (new Array(3)).fill((new Array(3)).fill(999))
cost_array[1][1] = 3

生成した配列に対して、mapで2次元配列を作ってあげると、単一の要素が更新されていく。

let cost_array = (new Array(N)).fill(null).map(x => (new Array(N)).fill(999))
cost_array[1][1] = 3