JavaScript求和函数for循环报错求助:解决ReferenceError问题
修复summation函数的ReferenceError及求和逻辑错误
问题分析
ReferenceError 根源
你在for循环中用let i = 1声明变量i,let的作用域仅限循环块内部,循环结束后外部无法访问i,因此return sum + i中的i会触发未定义错误。求和逻辑错误
循环内执行sum = sum + n,每次累加的是参数n而非当前循环变量i,最终结果会变成n * n,完全不符合1到n求和的需求。
修正后的代码
function summation(n) { let sum = 0; for (let i = 1; i <= n; i++) { sum = sum + i; // 累加当前循环变量i,而非固定值n } return sum; // 直接返回求和结果,无需额外加i } module.exports = summation;
修正说明
- 将循环内的累加对象从
n改为i,确保每次累加的是1到n的当前数值; - 删除
return语句中的+ i,循环结束后sum已经是1到n的总和,同时避免访问超出作用域的i变量。
优化方案(数学公式版)
如果追求更高效率,可以直接用等差数列求和公式计算,无需循环:
function summation(n) { return n * (n + 1) / 2; } module.exports = summation;
内容的提问来源于stack exchange,提问作者Shervin Rafiie
相关产品推荐
相关产品推荐

