function add() {
var value = 0;
function subAdd() {
for(var i = arguments.length; i--;) {
var v = parseFloat(arguments[i]);
if(!isNaN(v) && isFinite(v)) {
value += v;
}
}
return subAdd;
}
subAdd.toString = function() {
return value;
}
return subAdd.apply(null, arguments);
}
console.log(+add(2, 5)); //7
console.log(+add(2)(5)); //7
console.log(+add(1, 2, 3)); //6
console.log(+add(1)(2)(3)); //6
console.log(+add(1, 2)(3)); //6
console.log(+add(1)(2, 3)); //6
console.log(+add(1, 2)(3, 4)(5, 6)(7, 8)(9)); //45