Я пытался
function calcSum(a,b){ var ab = function (b) { return a+b; } if(typeof a == 'undefined'){ return ab; } if(typeof b == 'undefined'){ return ab; } else { return ab(b); } }
Это выглядит не так уж плохо - это работает для calcSum(1,2)
и calcSum(1)(2)
.Однако вы неправильно обрабатываете случаи, когда ничего (или undefined
) не передано:
calcSum()
должно возвращать функцию, которая все еще ожидает два аргумента calcSum(1)()
= ab()
должен вернуть функцию, которая все еще ожидает один аргумент
Вы уже сопоставили первый случай, но вы вернули ab
(который принимает только одно значение) вместо calcSum
(функция, которая будет принимать два значения).Чтобы это исправить, используйте
function calcSum(a,b){
var ab = function(b) {
if (typeof b == 'undefined') return ab;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
else return a+b;
}
if (typeof a == 'undefined') return calcSum;
// ^^^^^^^^
if (typeof b == 'undefined') return ab; // actually you don't need this, ab(b) already handles this case as well now
else return ab(b);
}