首页 > 解决方案 > 使用闭包时遇到问题

问题描述

我无法使用闭包来查找每次调用的输出平均值。

如果参数未定义,则仅当第一次调用未定义时才将其设置为 0。如果传递了数字,则返回输出的平均值。

function average() {
      let sum = 0;
      let count = 0;
      return function(num) {
        let increment = count++
        let avg;
        if(typeof num === "number" ) {
          sum += num;
          // avg = sum / increment
        } 
        return sum;
      }
    }
    
    // /*** Uncomment these to check your work! ***/
     const avgSoFar = average();
     console.log(avgSoFar()); // => should log 0
     console.log(avgSoFar(4)); // => should log 4
     console.log(avgSoFar(8)); // => should log 6
     console.log(avgSoFar()); // => should log 6
     console.log(avgSoFar(12)); // => should log 8
     console.log(avgSoFar()); // => should log 8

标签: javascriptclosures

解决方案


每次调用该函数时,您需要将计数加一并将总和除以计数以获得平均值。

function average() {
  let sum = 0;
  let count = 0;
  return function(num) {
    if(typeof num === "number" ) {
      sum += num;
      count++;
    } 
    return count != 0 ? sum / count: 0;
  }
}

// /*** Uncomment these to check your work! ***/
 const avgSoFar = average();
 console.log(avgSoFar()); // => should log 0
 console.log(avgSoFar(4)); // => should log 4
 console.log(avgSoFar(8)); // => should log 6
 console.log(avgSoFar()); // => should log 6
 console.log(avgSoFar(12)); // => should log 8
 console.log(avgSoFar()); // => should log 8


推荐阅读