我需要一个 js sum 函数才能像这样工作:
sum(1)(2) = 3
sum(1)(2)(3) = 6
sum(1)(2)(3)(4) = 10
etc.
听说做不到 不过听说如果+
在前面加上sum
就可以了。喜欢+sum(1)(2)(3)(4)
。
关于如何做到这一点的任何想法?
我需要一个 js sum 函数才能像这样工作:
sum(1)(2) = 3
sum(1)(2)(3) = 6
sum(1)(2)(3)(4) = 10
etc.
听说做不到 不过听说如果+
在前面加上sum
就可以了。喜欢+sum(1)(2)(3)(4)
。
关于如何做到这一点的任何想法?
不确定我是否理解你想要的,但是
function sum(n) {
var v = function(x) {
return sum(n + x);
};
v.valueOf = v.toString = function() {
return n;
};
return v;
}
console.log(+sum(1)(2)(3)(4));
这是在最后一次调用中使用空括号作为关闭键的示例(来自我上次采访):
总和(1)(4)(66)(35)(0)()
function sum(numberOne) {
var count = numberOne;
return function by(numberTwo) {
if (numberTwo === undefined) {
return count;
} else {
count += numberTwo;
return by;
}
}
}
console.log(sum(1)(4)(66)(35)(0)());
我将此修订版作为自己的帖子发布,因为我显然还没有足够的声誉来将其作为评论。这是@Rafael 优秀解决方案的修订版。
function sum (n) {
var v = x => sum (n + x);
v.valueOf = () => n;
return v;
}
console.log( +sum(1)(2)(3)(4) ); //10
我认为没有理由保留这v.toString
一点,因为它似乎没有必要。如果我这样做是错误的,请在评论中告诉我为什么需要 v.toString(没有它它通过了我的测试)。将其余的匿名函数转换为箭头函数以方便阅读。
这是一个使用 ES6 和 的解决方案toString
,类似于@Vemba
function add(a) {
let curry = (b) => {
a += b
return curry
}
curry.toString = () => a
return curry
}
console.log(add(1))
console.log(add(1)(2))
console.log(add(1)(2)(3))
console.log(add(1)(2)(3)(4))
新的 ES6 方式并且简洁。
当你想终止调用并获得最终值时,你必须在最后传递 empty() 。
const sum= x => y => (y !== undefined) ? sum(x + y) : x;
像这样称呼它-
sum(10)(30)(45)();