为什么我的3和5倍数累加求和JavaScript函数返回NaN?
问题根因与修复方法
- 输出
NaN的核心原因:代码声明let result时没有做初始化赋值。JavaScript中未手动初始化的局部变量默认值为undefined,执行result += i的逻辑等价于result = undefined + i,这类非数字类型和数字的混合运算结果为NaN。后续循环中无论叠加多少合法数字,NaN和任意数值的加法运算结果始终为NaN,最终返回值必然是异常结果。 - 异常是否和函数作用域有关:完全无关。
result是在函数内部顶层作用域声明的变量,整个循环逻辑、return语句都处于该变量的可访问范围内,不存在作用域隔离、跨作用域取值失效的问题。 - 最小修复方案:在声明
result时为其设置数字类型的初始值0,保证首次累加是两个数字之间的合法数学运算。
修正后的可正常运行代码:
function solution(number) { const multiples = [3, 5]; let result = 0; for (let i = 0; i < number; i++) { if (i % multiples[0] === 0 || i % multiples[1] === 0) { result += i; } } return result; } console.log(solution(49)); // 运行后输出543
补充说明:当前循环逻辑已经自动实现了重复值去重:循环逐一遍历数字,单个数字即使同时满足被3整除、被5整除的条件,也只会在单次循环中被累加一次,不需要额外增加去重判断。
内容的提问来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

