如何在JavaScript中进行多重闭包?

时间:2018-04-23 08:07:57

标签: javascript

我正在尝试找到closure的一般解决方案,请参阅下面的示例。

function sum(b){
      return function(a){
        return a+b;
      }
    }

console.log(sum(2)(3));

它正确地给出了输出5。但是如果我有这个总和(2)(3)(4)...(100)次。我该如何解决这个问题?

如何在javascript中查找总和 的总和(2)(3)(4)...(100) 感谢

2 个答案:

答案 0 :(得分:3)

代码:

function sum(v) {
    var f = function(b) {
        f.result += b;
        return f;
    }
    f.toString = function() { return this.result; };
    f.result = v;
    return f;
}

console.log(sum(2)(3)(4).result);
console.log(sum(2)(3)(4) + 100);

输出:

9
109

解释:我们创建一个函数对象f,如果我们调用f(123),它会将123添加到其间隔值f.result并返回自己进行下一次调用。 f.toString用于类型转换。

答案 1 :(得分:0)

https://gist.github.com/maniart/25a7a0939d0958c422c7

function sum(fn) {

    var args = [], fn;

    function exec() {
        return args.reduce(function(prev, curr) {
            return fn && fn.call(null, prev, curr);
        });
    }

    function addArg(arg) {
        if(arg) {
            args.push(arg);
            return addArg;
        } else {
            return exec();
        }
    }

    if(arguments.length < 1) {
        return sum;
    } else {
        fn = arguments[0];
        return addArg;
    }

}


//Sample use case: 

function add(num1, num2) {
  return num1 + num2;
}
sum(add)(2)(3)(5)(8)(22)(230)(100)(10)();