javascript - JavaScript 闭包:通过调用内部函数来添加数组的数字
问题描述
我有一个带有随机数的数组。我想通过使用外部函数调用内部函数来添加这些数字的总和。基本上,使用闭包。
let arr = [93, 95, 88, 0, 55, 91];
let addMany = function(arr){
let addTwo = function (numbers) {
console.log('array', arr)
console.log('numbers', numbers)
return numbers.reduce((acc,cur) => acc+cur,0)
}
return addTwo(arr);
}
let sum = new addMany(arr);
console.log('final sum', sum)
let res = sum.addTwo();
console.log(res);
我也认为我传递数组'arr'的次数太多了。我可能是错的。
我已经尝试过使用 IIFE 和模块化方法。那个工作得很好。我正试图以这种方式实现同样的目标。
解决方案
随着return addTwo(arr)
您已经直接返回结果。我假设您宁愿返回addTwo
自己,并使用arr
inside addTwo
:
let addMany = function(arr){
let addTwo = function () {
console.log('array', arr)
return arr.reduce((acc,cur) => acc+cur,0)
};
return addTwo;
}
您将其称为:
const closured = addMany(1, 2, 3);
console.log(closured()); // call addTwo
在您的示例中,您将其称为(new addMany(...)).addTwo()
... 以实现该行为,删除return
as 构造函数不返回任何内容,并将其addTwo
作为方法分配给this
(即返回的对象):
let addMany = function(arr){
this.addTwo = function () {
console.log('array', arr);
return arr.reduce((acc,cur) => acc+cur,0)
};
}
推荐阅读
- firebase - Firebase 实时数据库 - 读取多个子对象下的最新项目
- php - MySQL 进程占用 150-400% CPU
- java - 如何使用 try-with 并仍然保留记录器?
- ampl - 如何在 AMPL 中定义一个填充有单个值的数组
- apache-spark - Spark UI 中缺少 Streaming 选项卡
- javascript - Javascript字符串操作 - 电话号码验证
- sql-server - 交叉连接,根据table1显示表2的列值
- java - 检查 EmptyOrNull 以获取未知数量的集合和地图
- gridgain - GridGain - 在启动时缓存来自 Oracle 的数据并刷新缓存
- php - 警告:mysqli::__construct(): (HY000/2002): 没有这样的文件或目录