javascript - 使用闭包时遇到问题
问题描述
我无法使用闭包来查找每次调用的输出平均值。
如果参数未定义,则仅当第一次调用未定义时才将其设置为 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
解决方案
每次调用该函数时,您需要将计数加一并将总和除以计数以获得平均值。
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
推荐阅读
- typescript - 在 knockout.js (TypeScript) 中更改 observable 但不通知订阅者
- c++ - 如何使用接口从 C++ 中的模板强制使用通用数据类型?
- flutter - 尝试在颤振中使用 MultipartRequest 上传文件时出现握手异常
- python - Pandas 组合多个特定的先前行
- c - 如何使用 Intel Advisor 分析我的并行 MPI 应用程序?
- docker - 将 VNC 与 Docker 一起使用
- multithreading - DbSet.Add(和其他非数据库操作)线程安全吗?
- reactjs - React 中父组件如何重置多个子组件
- python - 如何从更深目录中的文件导入模块?
- wordpress - 图像未填充宽度屏幕