截至目前,我的sum函数看起来像下面的代码。它工作并返回连续调用的总和。但是如何在没有空括号的情况下完成这项工作呢?像theSum(5)(4)(3)
那样返回12。
function theSum(x) {
var total = x;
function rec(y) {
if (y === undefined) return total;
total += y;
return rec;
};
return rec;
}
console.log(theSum(5)(4)(3)()); // 12
答案 0 :(得分:1)
这是不可能的。函数不能返回函数和整数。您可以theSum(5, 4, 3) = 12
或theSum([5, 4, 3]) = 12
。
答案 1 :(得分:1)
这是一个使用toString方法的建议:
function theSum(x) {
var total = x;
function rec(y) {
total += y;
return rec;
};
rec.toString = function() { return total; }
return rec;
}
alert(theSum(5)(4)(3));
console.log(parseInt(theSum(5)(4)(3)));
但是请注意,您需要以某种方式将返回的引用转换为字符串,以便您看到结果。
答案 2 :(得分:0)
闭包和JavaScript鸭子打字救援:
function NumSumFun(initial){
function NumSumNext(num) {
initial+= num;
return NumSumNext;
}
NumSumNext.valueOf = function () { return initial; }
return NumSumNext;
}
var x = NumSumFun(10)(29); // ==> function 39
x + 1; // ==> 40
所以发生了什么事。它返回一个函数,但函数有一个valueOf属性,可以访问累计值,因此当用作数字时,函数就作为一个数字。