为啥我的 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 循环在“继续”之后没有重新评估条件?的主要内容,如果未能解决你的问题,请参考以下文章

for 循环是不是在每次迭代中重新评估其主体中的函数?

为啥我没有进入 React 无限重新渲染循环?

为啥在 for 循环之后比 for 循环之前慢得多?

尽管条件仍然成立,为啥这个 for 循环似乎没有执行?

当我使用 for 循环时,为啥我的代码没有在 forEach 中等待? [复制]

为啥它会忽略我在 for 循环中的继续? [关闭]