如何避免第二个console.log计算时累加第一个数组的求和结果?
数组求和函数重复调用结果累加异常的解决方法
问题原因
你定义的sum变量属于全局作用域,第一次调用getAverage后,sum的值会保留为717。第二次调用函数时,会在这个已有值的基础上继续累加新数组的元素,最终得到717+854=1571,和预期结果不符。
解决方案
方案1:将sum改为函数内部局部变量(推荐)
把sum的定义移到函数内部,每次调用函数时都会重新初始化sum为0,彻底规避全局变量带来的副作用:
function getAverage(scores) { let sum = 0; for (let i = 0; i < scores.length; i++) { sum += scores[i]; } return sum; } console.log(getAverage([92, 88, 12, 77, 57, 100, 67, 38, 97, 89])); // 输出717 console.log(getAverage([45, 87, 98, 100, 86, 94, 67, 88, 94, 95])); // 输出854
方案2:手动重置全局sum(不推荐)
如果必须保留全局变量,可以在每次调用函数前将sum重置为0,但这种方式会保留全局变量带来的潜在风险:
let sum = 0; function getAverage(scores) { sum = 0; // 调用前重置sum for (let i = 0; i < scores.length; i++) { sum += scores[i]; } return sum; }
方案3:使用数组reduce方法简化代码
利用JavaScript数组的reduce方法可以更简洁地实现求和,同时避免额外变量的问题:
function getAverage(scores) { return scores.reduce((total, current) => total + current, 0); }
内容的提问来源于stack exchange,提问作者Issac Alleyne
相关产品推荐
相关产品推荐

