【发布时间】:2025-12-16 09:30:01
【问题描述】:
如何使用函数柯里化来实现这些场景?
add(3,4)(3)
add(3)(4)(3)
add(3)(4,3)
我读了很多博客都找不到这种情况。有人可以帮我解决这个问题吗?
【问题讨论】:
-
检查下划线或 Ramda 库。
-
谢谢菲利克斯·克林。
标签: javascript function currying
如何使用函数柯里化来实现这些场景?
add(3,4)(3)
add(3)(4)(3)
add(3)(4,3)
我读了很多博客都找不到这种情况。有人可以帮我解决这个问题吗?
【问题讨论】:
标签: javascript function currying
这样的?
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.
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 });
}
}
}
我没有找到一个解决方案来同时处理这两个问题。
【讨论】: