Поскольку большинство из нас знает, мы можем создать простую функцию, подобную этой.Функция вызова двух способов с несколькими аргументами
function calc(a,b){
return a+b
}
calc(1,1); //returns 2
Мы также можем сделать что-то вроде этого
function calc(a){
return function(b){
return a+b
}
}
calc(1)(1); //returns 2
А что, если мы имели несколько аргументов?
function calc() {
function r(arg) {
var a = [];
for(var i = 0, l = arg.length; i < l; i++){
a[i] = arg[i];
}
return a.reduce(function(p, c) {
return p + c;
});
}
var res = r(arguments);
return function() {
res += r(arguments);
return res;
}
}
Это работает для calc(1,2)(1)
но это не для calc(1,2,1)
Есть ли способ объединить обе версии? Это означает, что при вызове calc(1,1)
мы могли бы также назвать calc(1)(1)
и оба еще вернутся бы 2.
Или calc(1,2,3)
calc(1,2)(3)
calc(1)(2,3)
бы все вернуть 6
Использование переменной длины, то это возможно. – meskobalazs
Кто-то отправил [эту ссылку] (http://stackoverflow.com/a/31795868/1250301) в [еще один вопрос] (http://stackoverflow.com/questions/31795520/a-single-function-that-can- be-called-in-two-ways/31795640 # 31795640), о функциях каррирования. Это стоит прочитать. –
Возможный дубликат [Javascript sum function] (http://stackoverflow.com/questions/5832891/javascript-sum-function) – Grundy