为啥我的 for 循环在“继续”之后没有重新评估条件?
Posted
技术标签:
【中文标题】为啥我的 for 循环在“继续”之后没有重新评估条件?【英文标题】:Why is my for loop not re-evaluating condition after 'continue'?为什么我的 for 循环在“继续”之后没有重新评估条件? 【发布时间】:2021-07-21 12:25:30 【问题描述】:我正在学习 js,但我不知道为什么我的循环不起作用。 pos 是一个对象 i, j。我希望循环从 pos.i-1 开始,直到 pos.i+1 和 j 相同。 Board 是一个矩阵(表),if 语句是为了确保 i 和 j 值不超过矩阵大小并且跳过给定位置的单元格。问题是当代码“继续”时,它会执行 i++ 或 j++,但不会返回到 for 循环中的条件,而是继续运行。我很想知道为什么会这样,以及我可以做些什么来让它按照我需要的方式工作。
function expandShown(board, pos)
for (var i = pos.i - 1; i <= pos.i + 1; i++)
if (i < 0 || i >= board.length) continue;
for (var j = pos.j - 1; j <= pos.j + 1; j++)
if (j < 0 || j >= board.length) continue;
if (i === pos.i && j === pos.j) continue;
var currCell = board[i][j];
if (!currCell.isShown)
currCell.isShown = true;
gGame.shownCount++;
var cellToRender = document.querySelector(`#cell-$i-$j`);
var strToRender = (currCell.isMine) ? MINE : currCell.minesAroundCount;
renderCell(cellToRender, strToRender);
【问题讨论】:
在continue
之后进入循环中的下一个迭代。所以 continue 之后的代码块不会被执行。
您能否将输入包含到expandShown
以使其成为minimal reproducible example
我不想在 continue 之后执行代码块,我希望它只要它仍然符合 for 循环中的条件,就可以进入下一次迭代,但由于某种原因它只是不断添加到'i'和'j'
@Jamiec 当然!棋盘是一个 8*8 矩阵(数组的数组),例如 pos 是 2,2
我的意思是实际值。
【参考方案1】:
继续就是这样工作的:https://www.w3schools.com/jsref/jsref_continue.asp
如果指定条件发生, continue 语句会中断一次迭代(在循环中),并继续循环中的下一次迭代。
【讨论】:
当它进入下一次迭代时,是否首先在 for 循环中进行评估以确保它仍然符合条件?在这种情况下确保 i 好的,所以我的问题是,例如 pos.i=2 ,我希望循环从 i=1 开始并在 i=3 停止,但是它只是不断添加到 i 而不检查 i 【参考方案2】:continue
语句用于停止循环当前迭代的执行,并直接跳转到下一个迭代:
continue
语句终止当前循环或标记循环的当前迭代中语句的执行,并在下一次迭代中继续执行循环。——MDN Web Docs
【讨论】:
当它进入下一次迭代时,是否首先在 for 循环中进行评估以确保它仍然符合条件?在这种情况下确保 i 一旦达到continue
,当前迭代停止,下一次开始@AnnaHaskelsky以上是关于为啥我的 for 循环在“继续”之后没有重新评估条件?的主要内容,如果未能解决你的问题,请参考以下文章