2015-09-28 4 views
0

Есть ли варианты реализации функции добавления в JS?Как реализовать функцию multicall в 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, вы создаете фрейм-функцию '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>