var arr = [{ name: "John", score: "8.8" }, { name: "John", score: "8.6" }, { name: "John", score: "9.0" }, { name: "John", score: "8.3" }, { name: "Tom", score: "7.9" }],
avgScore = arr.reduce(function (sum, count) {
return function (avg, person) {
if (person.name === "John") {
sum += +person.score;
return sum / ++count;
}
return avg;
};
}(0, 0), 0);
console.log(avgScore);
我发现了这个有趣的代码,我想知道闭包在Javascript中是如何工作的。令我吃惊的是,带有累加器和迭代元素的函数被另一个函数包装。reduce不应该接受带有累加器和迭代元素的函数,那么为什么reduce函数仍然有效,尽管具有vave迭代元素的累加器函数被另一个函数包装?
另外,为什么我们使用(0,0)调用带有闭包的函数,但是在第二次迭代中,我们使用更新的总和和计数(sum,1)来调用它。闭包不应该一遍又一遍地使用参数(0,0)吗?
DIEA
慕慕森
相关分类