You need to enable JavaScript to run this app. 实现狗狗日投喂量计算的hungryDog函数触发foodAmount未定义报错
优惠活动
大模型
产品
解决方案
定价
更多

实现狗狗日投喂量计算的hungryDog函数触发foodAmount未定义报错

代码问题定位与修复方案

触发报错的核心原因

  • 变量作用域隔离问题:原代码在每个if/else分支内部用let单独声明foodAmount,let定义的变量是块级作用域,仅在当前分支的花括号代码块内有效,一旦跳出分支块就会被回收,函数外层的return foodAmount语句完全访问不到该变量,直接触发foodAmount is not defined的报错。
  • 逻辑边界适配偏差:幼犬阶段的年龄判断硬编码了近似小数阈值,会漏掉临界年龄值的计算,和投喂规则的月龄换算要求不匹配。

修复步骤

  • 将foodAmount的声明提升到函数作用域最外层,保证所有分支的赋值都能被外层return语句访问到
  • 移除每个分支内部的let重复声明,直接对函数内作用域的foodAmount赋值
  • 替换幼犬阶段硬编码的小数年龄阈值,直接用月龄换算的分数值做判断,避免浮点精度导致的边界漏判
  • 清理冗余的嵌套判断条件,简化分支逻辑

修复后可正常运行的代码

function hungryDog(age, weight) {
  // 函数作用域声明变量,覆盖所有计算分支
  let foodAmount;
  if (age >= 1) {
    // 成犬投喂逻辑
    if (weight <= 5) {
      foodAmount = weight * 0.05;
    } else if (weight <= 10) {
      foodAmount = weight * 0.04;
    } else if (weight <= 15) {
      foodAmount = weight * 0.03;
    } else {
      foodAmount = weight * 0.02;
    }
  } else {
    // 幼犬投喂逻辑,严格匹配月龄换算规则
    if (age >= 2/12 && age <= 4/12) {
      foodAmount = weight * 0.10;
    } else if (age > 4/12 && age <= 7/12) {
      foodAmount = weight * 0.05;
    } else {
      foodAmount = weight * 0.04;
    }
  }
  return foodAmount;
}
// 测试用例:15磅体重、1岁年龄的返回值完全符合预期
console.log(hungryDog(1, 15)) // 输出 0.44999999999999996

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

相关产品推荐
方舟 Agent Plan

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

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