首页 > 解决方案 > 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 和模块化方法。那个工作得很好。我正试图以这种方式实现同​​样的目标。

标签: javascriptclosures

解决方案


随着return addTwo(arr)您已经直接返回结果。我假设您宁愿返回addTwo自己,并使用arrinside 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()... 以实现该行为,删除returnas 构造函数不返回任何内容,并将其addTwo作为方法分配给this(即返回的对象):

let addMany = function(arr){
  this.addTwo = function () {
    console.log('array', arr);

    return arr.reduce((acc,cur) => acc+cur,0)
  };
}

推荐阅读