JavaScript井字棋isWinner函数未即时触发胜利提示问题求助
问题原因
你当前的handleCellClick函数执行顺序写反了:先执行胜负判定,再处理用户落子、更新对应玩家的落子组合数组。这就导致每次判定胜负时,用的是用户上一步的落子数据,刚下的获胜棋步并没有被计入判定,自然不会及时触发提示。叠加回合切换的逻辑后,就会出现延后多步才弹出提示的问题。
修复方案
把胜负判定的逻辑挪到落子处理完成之后执行即可,修改后的handleCellClick函数参考如下:
function handleCellClick() { let clickedcell = this.getAttribute('value'); let freeCell = isCellFree(clickedcell); if(freeCell) { handleCellPlayed(this, clickedcell); claimedcells.push(clickedcell); // 落子完成后再判定胜负,落子后xturn已切换,因此判断逻辑要对应 if(xturn) { // 当前xturn为true,说明刚落子的是O,判定O的组合 if(isWinner(ocombination)) { alert('winner chicken dinner'); } } else { // 当前xturn为false,说明刚落子的是X,判定X的组合 if(isWinner(xcombination)) { alert('winner chicken dinner'); } } } }
可选优化(避免获胜后继续落子)
- 新增全局变量
let gameOver = false; - 弹出获胜提示后设置
gameOver = true; - 在
handleCellClick函数最开头加拦截判断:
if (gameOver) return;
内容的提问来源于stack exchange,提问作者Igor34
相关产品推荐
相关产品推荐

