保持状态在咖喱功能

时间:2016-11-01 08:39:34

标签: javascript currying

有没有办法在写一个curried函数时保持某种内部状态?

例如,假设我想编写一个curried函数,该函数考虑了之前调用函数的次数。

即。 addProgressively(3)(4)(5)= 1 * 3 + 2 * 4 + 3 * 5 = 26.

我的方法是添加一些计数器,每次返回一个新的curried函数时递增,但是我找不到在addProgressively函数中跟踪该参数的好方法。

1 个答案:

答案 0 :(得分:6)

你可以使用另一个变量作为因子的闭包。

function addProgressively(x) {
    var factor = 1,
        sum = factor * x;

    function f(y) {
        factor++;
        sum += factor * y;
        return f;
    }; 
    f.toString = function () { return sum; };
    return f;
}

console.log(addProgressively(3)(4)(5));