2015-09-28 57 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>