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

JS multiplyAll函数返回9和5而非预期乘积,求问题原因

问题原因分析
  • 参数接收错误:你的函数目前仅声明了1个形参num,当传入多个数值调用时,num只会被赋值为第一个传入的实参(第一次调用为9,第二次为5)。数字类型不存在length属性,取值为undefined,因此for循环的判断条件i < num.length直接不成立,循环完全不会执行,函数直接返回第一个参数的值,这就是得到9和5的直接原因。
  • 乘积逻辑错误:就算正确拿到了所有参数的数组,现有逻辑也会出错——你直接用存储参数数组的变量num来存乘积结果,第一次乘完后num就变成了数字类型,后续循环再取num[i]会得到undefined,最终结果会变成NaN。
修复方案

你需要先修改参数接收逻辑,拿到所有传入的参数,再单独声明变量存储乘积结果,修改后的代码如下:

// 使用剩余参数语法...nums接收所有传入的参数,自动封装为数组
function multiplyAll(...nums){
  // 乘积初始值设为1
  let result = 1
  for (let i = 0; i < nums.length; i++){
    result *= nums[i]
  }
  return result
}
console.log(multiplyAll(9, 4, 5, 6, 7, 2, 1, 8, 3)) // 输出 362880
console.log(multiplyAll(5, 5, 5, 3)) // 输出 375

如果需要兼容不支持剩余参数语法的旧环境,也可以用arguments对象获取所有参数:

function multiplyAll(){
  let result = 1
  for (let i = 0; i < arguments.length; i++){
    result *= arguments[i]
  }
  return result
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:07