знакомый задал задачу, как сделать следующее:
sum (q, e) = sum (q)(e);
UPDATE функция должна принимать не ограниченное количество аргументов
Для принятия списка параметров, достаточно добавить возможность их обрабатывать, например с помощью функции reduce
function sum() {
function add(a, b) {
return a + b;
};
var num = [].reduce.call(arguments, add);
function inner() {
return sum.apply(this, [].concat.apply([num], arguments));
}
inner.toString = inner.valueOf = inner.toJSON = function() {
return num;
}
return inner;
}
function o(prepend, val){
document.getElementById('res').innerHTML += (prepend? (prepend+": "):"")+(typeof val == 'string'? val : JSON.stringify(val)) + '<br />';
}
o('sum(1,2,3)(4,5,6)(7)',sum(1,2,3)(4,5,6)(7));
o('sum(1,2,3)',sum(1,2,3));
o('sum(1)(2,3)', sum(1)(2,3));
o('sum(1,2)(3)',sum(1,2)(3));
o('sum(1,2)(3)+"4"',sum(1,2)(3)+"4");
o('sum(1)(2,3)+4',sum(1)(2,3)+4); //10
<div id="res"></div>
Вопрос не вполне понятен, но, возможно, имеется в виду нечто вроде такого?
var sum = function(q) {
return function(e) {
return q + e;
}
}
Продвижение своими сайтами как стратегия роста и независимости