2015-09-28 61 views
0

有什么变种可以实现JS中的add函数吗?如何在JavaScript中实现多重函数?

console.log(add(1)(3)(5)(35)); // 44 

可以有任何数量的函数调用。

+0

您是否在寻找“可变参数”(即可以采取任何数量的参数,如函数' Math.min')? – Thilo

+3

我不认为你可以在javascript中完全这样做,至少你需要一些不同的东西,比如'()'而不是另一个数字,以区分你所得到的事实链条的末端。你想看看[函数currying](http://www.crockford.com/javascript/www_svendtofte_com/code/curried_javascript/index.html) –

+0

使用Ramda,你创建一个curried函数'fnc'来添加它的参数,然后将它传递给'nAry(4,fnc)',但你需要事先知道参数的长度。否则,就像@JamesThorpe提到的那样,你需要返回一个thunk –

回答

0

您可以半私有财产分配的功能,是这样的:

function doSum(sum, reset){ 
 
    doSum.sum = reset ? 0 : (doSum.sum || 0); 
 
    doSum.sum += sum || 0; 
 
    return !sum && !reset ? doSum.sum : doSum; 
 
}; 
 

 
// calculate 1 + 2 + 3 + 4 
 
var total = doSum(1)(2)(3)(4)(); 
 

 
// reset, calculate 10 + 20 + 30 + 40 
 
var total2 = doSum(10,true)(20)(30)(40)(); 
 

 
// continue, calculate total2 + 100 + 100 + 50 
 
var total2a = doSum(100)(100)(50)(); 
 

 
// print result 
 
document.querySelector('#result').textContent = 
 
    'total = ' + total + '\n' + 
 
    'total2 = ' + total2 + '\n' + 
 
    'total2a = ' + total2a;
<pre id="result"></pre>