Moloch,
А почему должно быть 3, если six и three ссылаются на одну и туже функцию и вызов одной из них, изменяет свойство sum обеих? Объект переменных надо новый создавать.
<script>
function add(x) {
var part = function (y) {
part.sum += y;
return part;
};
part.sum = x;
part.valueOf = function () {
return part.sum;
};
return part;
}
var three = add(1)(2);
var six = add(+three)(3)
alert(+three);
</script>