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

JavaScript使用回调函数计算数组平均值:结果始终为0

问题排查:数组平均值始终为0的原因及修复方案

我帮你梳理下代码里的几个核心问题,这就是你一直得到0的根源:

  • 调用顺序完全搞反了:你现在先执行display(avg, sumUP),这时候sumUP还没运行过,avg还是你初始化的0,自然直接输出0。得先让求和计算的逻辑跑完,再调用展示函数。
  • 回调函数的参数错误:display里写的callback(average),但average这个变量根本没定义,而且原本的回调逻辑完全颠倒——你应该先执行求和,再展示,而不是在展示里调用求和。
  • 平均值计算的位置冗余:在循环里每次迭代都计算平均值完全没必要,等循环结束拿到总和后,计算一次就足够了。
  • 依赖全局变量易出问题:虽然用全局的sum和avg能工作,但这种写法很容易因为变量污染导致奇怪的bug,更稳妥的方式是让函数返回计算结果。

修正原有逻辑的代码(保留你的函数结构)

var a = [10,20,30,40]
var sum = 0
var avg = 0

function sumUP(arr) {
  for (var i=0; i<arr.length; i++){
    sum += arr[i];
  }
  // 循环结束后再计算平均值,避免冗余计算
  avg = sum / arr.length;
}

function display(average) {
  document.write("Average of array is " + average)
}

// 先执行求和计算,再调用展示函数
sumUP(a);
display(avg);

更优的模块化写法(无全局变量)

这种写法避免了全局变量的依赖,代码更清晰健壮:

var a = [10,20,30,40]

// 专门负责计算平均值,返回结果
function calculateAverage(arr) {
  var sum = 0;
  for (var i=0; i<arr.length; i++){
    sum += arr[i];
  }
  return sum / arr.length;
}

// 专门负责展示结果
function display(average) {
  document.write("Average of array is " + average)
}

// 先计算再展示
var avg = calculateAverage(a);
display(avg);

内容的提问来源于stack exchange,提问作者Chris A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:18