Здравствуйте. В учебнике попалась задача
sum(2, 5, 10); // 17
sum(2, 5)(10); // 17
sum(2)(5)(10); // 17
sum(2)(5, 10); // 17
Здесь жёстко было определено, что можно использовать только три числовых аргумента и функция должна вернуть результат. Здесь как бы не сложно, мой один из вариантов:
function sum(){
var arg = arguments;
var summa = sumArg(arg);
var x = (3 - arg.length);
if (!x) return summa;
else
return function a(){
var arg = arguments;
x -= arg.length;
summa += sumArg(arg);
if (!(x)) return summa;
else return a;
};
}
function sumArg(arg){
var itog = 0;
var len = arg.length;
for(var x = 0; x < len; x++){
itog += arg[x];
};
return itog;
}
sum(2, 5, 10); // 17
sum(2, 5)(10); // 17
sum(2)(5)(10); // 17
sum(2)(5, 10); // 17
Тут зная когда закончатся аргументы мы сделаем возврат значения (прервём цепочку создания объектов вызова и вернём значение "верхнего" замыкания, не сложно). Вопрос состоит вот в чём, как можно определить при выполнении функции (как бы вылезти наружу вперёд до окончания выполнения) как будет использоваться возвращаемое функцией значение. Если брать вышеуказанный пример, когда происходит последний вызов в выражении если заранее не известно количество предстоящих вызовов . Спасибо, извините за каламбур