我有一个随机数的数组。我想通过使用外部函数调用内部函数来添加这些数字的总和。基本上,使用闭包。
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和模块化方法进行了尝试。那一个很好。我正在尝试以这种方式实现同样的目标。
答案 0 :(得分:2)
使用return addTwo(arr)
,您已经直接返回结果。我假设您宁愿自己返回addTwo
,并在arr
内使用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
,因为构造函数不返回任何内容,并为{分配了addTwo
作为方法{1}}(它是返回的对象):
this
答案 1 :(得分:1)
您可以采用难以理解的函数和原型来添加值。
function Numbers(array) {
this.numbers = array;
}
Numbers.prototype.add = function () {
return this.numbers.reduce((a, b) => a + b, 0);
};
var array = [93, 95, 88, 0, 55, 91],
numbers = new Numbers(array),
result = numbers.add();
console.log(result);
另一种可能性是使用流畅的接口,在该接口中您可以返回带有某些函数的对象,并可以在其中链接这些函数。
function take(array) {
var object = {
add: () => array.reduce((a, b) => a + b, 0),
update: cb => take(array.map(cb)),
valueOf: () => array
};
return object;
}
var array = [93, 95, 88, 0, 55, 91],
numbers = take(array),
result = numbers.add();
console.log(result);
console.log(numbers.valueOf());
console.log(numbers.update(x => 2 * x).valueOf());