如何使用函数currying实现这些场景?
add(3,4)(3)
add(3)(4)(3)
add(3)(4,3)
我读过这么多博客无法找到这种情况。有人可以帮我这个。
答案 0 :(得分:1)
这样的东西?
var total = 0;
function add(){
// Add up every argument received
for (var i in arguments)
total += arguments[i];
return add;
}
add(3,4)(3);
console.log(total);
add(3)(4)(3);
console.log(total);
add(3)(4,3);
console.log(total);
如果您不希望该函数依赖于全局变量,请将该值另存为add
函数的属性
function add(){
// Add up every argument received
for (var i in arguments)
add.total += arguments[i];
return add;
}
add.total = 0;
add.toString = function(){
var total = add.total;
add.total = 0;
return total;
};
var sum1 = add(3,4)(3);
alert( sum1 );
var sum2 = add(3)(4)(3);
alert( sum2 );
var sum3 = add(3)(4,3);
alert( sum3 );
答案 1 :(得分:0)
我在这里看到两个令人讨厌的场景:
<强> 1 强>
add(3,4)(3)
add(3)(4,3)
和
<强> 2 强>
add(3)(4)(3)
您可以解决的第一个问题:
function add() {
const args1 = Array.prototype.slice.call(arguments);
return function() {
const args2 = Array.prototype.slice.call(arguments);
return args1.concat(args2).reduce(function(a, i) { return a + i });
}
}
第二个:
function add() {
const args1 = Array.prototype.slice.call(arguments);
return function() {
const args2 = Array.prototype.slice.call(arguments);
return function() {
const args3 = Array.prototype.slice.call(arguments);
return args1.concat(args2).concat(args3).reduce(function(a, i) { return a + i });
}
}
}
我没有找到一个解决方案来同时处理这两个功能。