在咖喱函数中保持状态
Keeping state in curried function
有没有办法在编写柯里化函数时保持某种内部状态?
例如,假设我想编写一个柯里化函数,它考虑了该函数之前被调用的次数。
即渐进式(3)(4)(5) = 1*3 + 2*4 + 3*5 = 26.
我的方法是添加一些计数器,每次返回新的柯里化函数时该计数器都会递增,但我找不到在 addProgressively 函数中跟踪该参数的好方法。
您可以使用另一个变量作为因子的闭包。
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));
有没有办法在编写柯里化函数时保持某种内部状态?
例如,假设我想编写一个柯里化函数,它考虑了该函数之前被调用的次数。
即渐进式(3)(4)(5) = 1*3 + 2*4 + 3*5 = 26.
我的方法是添加一些计数器,每次返回新的柯里化函数时该计数器都会递增,但我找不到在 addProgressively 函数中跟踪该参数的好方法。
您可以使用另一个变量作为因子的闭包。
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));