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

JavaScript计数器函数返回undefined和NaN问题求助

问题分析与修复

你的代码出现问题的核心原因有三个:

  • 每个方法内部都重新声明了init参数,这会覆盖外部作用域的init变量。调用counter.increment()这类方法时没有传参,导致方法内的init是undefined,对undefined进行自增/自减操作会得到NaN,console.log自然输出undefined。
  • init++和init--是后置自增/自减运算符,会先返回变量的当前值,再执行递增/递减操作,这不符合你预期的返回init+1或init-1的需求。
  • 没有保留初始的init值,当调用increment或decrement修改init后,reset无法回到最初的输入值。

修复后的代码

var createCounter = function(init) {
  // 保存初始值,用于reset方法
  const initialValue = init;
  return {
    increment: () => {
      // 使用前置自增,先递增再返回
      return ++init;
    },
    decrement: () => {
      // 使用前置自减,先递减再返回
      return --init;
    },
    reset: () => {
      // 重置为初始值并返回
      init = initialValue;
      return init;
    }
  }
};

const counter = createCounter(5)
console.log(counter.increment()); // 6
console.log(counter.reset()); // 5
console.log(counter.decrement()); // 4

关键修改点

  • 移除每个方法内的init参数,让方法直接访问外部作用域的init变量。
  • 使用前置自增++init和前置自减--init,确保返回的是修改后的值。
  • 新增initialValue变量保存初始的init值,保证reset方法能正确恢复到初始状态。

内容的提问来源于stack exchange,提问作者Gustavo F. Marcial

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:02