我尝试编写以下代码来查找' n'使用和函数的数字。我在输出中得到了正确的答案。但我无法使用sum函数返回,因为我总是要返回一个函数,这是curry effect所必需的。
请帮忙。提前谢谢。
var output = 0,
chain;
function sum() {
var args = Array.prototype.slice.call(arguments);
output += args.reduce(function(a, b) {
return a + b;
});
sumCurried = sum.bind(output);
sumCurried.val = function() {
return output;
}
return sumCurried;
}
debugger;
document.getElementById('demo').innerHTML = sum(1, 2)(3)(4);
// document.getElementById('demo').innerHTML = sum(1)(3)(4);

<p id='demo'></p>
&#13;
enter code here
答案 0 :(得分:0)
例如,您可以向curried函数添加一个停止条件 - 如果在没有参数的情况下调用该函数,则返回输出:
var output = 0,
chain;
function sum() {
var args = Array.prototype.slice.call(arguments);
if(args.length === 0) {
return output;
}
output += args.reduce(function(a, b) {
return a + b;
});
sumCurried = sum.bind(output);
return sumCurried;
}
console.log(sum(1, 2)(3)(4)());
<p id='demo'></p>
返回的curry函数有一个val
属性,该函数返回当前值:
var output = 0,
chain;
function sum() {
var args = Array.prototype.slice.call(arguments);
output += args.reduce(function(a, b) {
return a + b;
});
sumCurried = sum.bind(output);
sumCurried.val = function() {
return output;
}
return sumCurried;
}
console.log(sum(1, 2)(3)(4).val());
<p id='demo'></p>
答案 1 :(得分:0)
你为什么要使用咖喱?但是,这是一个较短的版本:
const sum = (...args) => {
const func = (...s)=> sum(...args,...s);
func.value = args.reduce((a,b)=>a+b,0);
return func;
};
//usable as
sum(1,2).value,
sum(1,1)(1).value,
sum(1,1)(1,1)(1,1).value
你总是需要结束曲线链。但是,它可以缩短:
func.valueOf = ()=> args.reduce((a,b)=>a+b,0);
//( instead of func.value = ... )
所以,当你打电话时,你可以这样做:
+sum(1,2,3)
+sum(1)(1)(1)