function sum() {
var s = Array.prototype.reduce.call(arguments, function (x, y) { return x + y; }, 0);
var f = function () {
var a = Array.prototype.slice.call(arguments);
a.push(s);
return sum.apply(null, a);
};
f.valueOf = function () { return s; };
return f;
}
sum(1,2,3,4);
sum(1)(2)(3);
sum(1,2)(3);