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
相关产品推荐
相关产品推荐

