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

多次调用getAverage函数时console.log结果累加问题求助

多次调用getAverage函数返回值累加的原因

问题描述

编写的getAverage函数单次调用时能返回正确平均值,但多次调用配合多个console.log时,返回值会出现累加情况,无法分别计算每组数据的平均值。

运行代码如下:

let sum = 0;
const scores = [];

function getAverage(scores) {
  for (let i = 0; i < scores.length; i++) {
    sum += scores[i];
  }
  return (sum / scores.length)
}

console.log(getAverage([92, 88, 12, 77, 57, 100, 67, 38, 97, 89]));
console.log(getAverage([45, 87, 98, 100, 86, 94, 67, 88, 94, 95]));

实际运行结果:第一个console.log正确输出71.7,但第二个输出157.1(两次结果的累加值),而非预期的85.4;若注释掉第一个console.log,第二个能正常输出预期结果。

原因分析

  • sum变量被声明在全局作用域中,函数每次调用时都会直接复用这个全局变量,不会自动重新初始化。
  • 第一次调用getAverage时,sum累加了第一组数据的总和717,返回717/10=71.7。
  • 第二次调用时,sum没有被重置为0,而是在717的基础上继续累加第二组数据的总和854,得到717+854=1571,最终返回1571/10=157.1,这就是出现累加结果的原因。

解决方法

最合理的方案是将sum变量移到函数内部,确保每次调用函数时都会重新初始化:

const scores = [];

function getAverage(scores) {
  let sum = 0; // 移至函数内部,每次调用都重置为0
  for (let i = 0; i < scores.length; i++) {
    sum += scores[i];
  }
  return sum / scores.length;
}

console.log(getAverage([92, 88, 12, 77, 57, 100, 67, 38, 97, 89])); // 71.7
console.log(getAverage([45, 87, 98, 100, 86, 94, 67, 88, 94, 95])); // 85.4

也可以在函数开头手动重置全局的sum为0,但这种方式依赖全局变量,容易引发其他潜在问题,不推荐:

let sum = 0;
const scores = [];

function getAverage(scores) {
  sum = 0; // 每次调用前重置sum
  for (let i = 0; i < scores.length; i++) {
    sum += scores[i];
  }
  return sum / scores.length;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:52:47