为什么javascript while循环挂起?

为什么javascript while循环挂起?,javascript,while-loop,freeze,Javascript,While Loop,Freeze,我在用javascript做一件非常简单的事情,创建一个扫雷舰网格 gridsize=9; //电网初始化 var grid=Array(gridsize).fill(Array(gridsize).fill(null)); //这来自 函数randint(最小值、最大值){ 返回Math.floor(Math.random()*(max-min+1))+min; } nbombs=20; insertedbombs=0; 而(insertedbombs的问题是Array#fill并不像您想象的

我在用javascript做一件非常简单的事情,创建一个扫雷舰网格

gridsize=9;
//电网初始化
var grid=Array(gridsize).fill(Array(gridsize).fill(null));
//这来自
函数randint(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1))+min;
}
nbombs=20;
insertedbombs=0;

而(insertedbombs的问题是
Array#fill
并不像您想象的那样

在您的示例中,您创建了一个数组
数组(gridsize)。填充(null)
,然后将该数组放在外部数组的每个索引处。这意味着
网格实际上包含相同的数组,重复了9次。因此,当您分配
网格[0][0]
时,您实际上分配了
网格[0][0]
网格[1][0]
网格[2][0]
网格[3][0]
,等等……一次完成(ish)

const gridSize=9;
//电网初始化
常量grid=Array(gridSize).fill(Array(gridSize).fill(null));
console.log(网格[0]==网格[1]);
网格[0][0]=10;

console.log(grid[0][0],grid[0][0]==grid[1][0]);
grid[rx][ry]
将永远不会为
null
。您的
grid
数组包含相同的内部数组9次。如果您插入了9个炸弹,那么就没有空间了。谢谢!所以问题出在网格初始化中。