如何在JavaScript中实现多重函数?
答
您可以半私有财产分配的功能,是这样的:
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>
您是否在寻找“可变参数”(即可以采取任何数量的参数,如函数' Math.min')? – Thilo
我不认为你可以在javascript中完全这样做,至少你需要一些不同的东西,比如'()'而不是另一个数字,以区分你所得到的事实链条的末端。你想看看[函数currying](http://www.crockford.com/javascript/www_svendtofte_com/code/curried_javascript/index.html) –
使用Ramda,你创建一个curried函数'fnc'来添加它的参数,然后将它传递给'nAry(4,fnc)',但你需要事先知道参数的长度。否则,就像@JamesThorpe提到的那样,你需要返回一个thunk –