function sum(...args) {
function inner(...more) {
return sum(...args,...more);
}
let total = args.reduce((a, b) => a+b, 0);
inner.toString = () => total;
return inner;
}
console.log(sum(1)(2)(2)(3)) // 8
console.log(sum(1,2)(2,3)) //8
console.log
не вызывает неявного приведения к строке, а потому в консоли мы увидим не 8
, а то что там и есть на самом деле, т.е. function inner() {}
toString
же неявно вызывается именно в случае использования объекта как строки. console.log(sum(1)(2)(2)(3) + 'px') // 8px
.