You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Conway生命游戏实现:点击Next按钮代码无报错停止,仅首个console.log执行

根因
  • 浏览器触发按钮点击事件时,会自动把MouseEvent事件对象作为第一个实参传入绑定的回调函数
  • 你直接把nextGen绑定为点击回调,nextGen第一个形参定义为rows,事件对象直接覆盖了默认值30,此时rows是MouseEvent实例,不是数字
  • 循环判断i < rows时,JS隐式将两侧转数字,MouseEvent转数字结果为NaN,0 < NaN恒为false,外层循环直接终止,内层循环里的console.log("TWO")没有执行机会
  • 整个流程没有访问任何对象属性,因此不会抛出报错,完全匹配现象
修复步骤
  1. 修改事件绑定逻辑,避免事件对象传入nextGen:

    nextButton.addEventListener('click', () => nextGen(), false);
    

    这样触发回调时nextGen的两个形参都是undefined,会正常使用默认的30行、50列参数。

  2. 优化二维数组生成逻辑,消除隐式坑:
    你原本用reduce生成二维数组的写法依赖push返回值配合&&cur,可读性差且容易因后续修改出bug,可替换为更直观的切片实现:

    // 替换原本的reduce代码
    let current = [];
    for (let i = 0; i < rows; i++) {
        current.push(flatBoard.slice(i * columns, (i + 1) * columns));
    }
    
补充说明

当前的状态计算逻辑本身没问题:先将旧状态存为current快照,再基于快照计算每个格子的下一代状态,最后更新复选框,不会出现边算边改导致状态错乱的问题。


内容的提问来源于stack exchange,提问作者anotherOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 11:36:03