sum(0)(...)(n) всегда возвращает функцию
f
Метод
alert принимает на вход строку, поэтому в момент вызова
alert выполняется автоматическое преобразование функции
f к строке. По умолчанию метод f.
toString функции вернул бы текст ее исходного кода, но для функции f метод был преопределен и теперь он возвращает значение currentSum из замыкания.
Казалось бы все хорошо, но это не так. В логических преобразованиях объект (в частном случае -
это функция) всегда true. Поэтому, хоть
console.log( Number(sum(5)(-5)) );
и возвращает 0, результат
console.log( Boolean(sum(5)(-5)) );
будет true.