Простое суммирование произвольного числа аргументов:
const sum = (...args) => args.reduce((acc, n) => acc + n, 0);
Каррированный sum(1)(3)(2) через toString
// Временная сложность: O(k) - каждый вызов f выполняется за O(1)// Пространственная сложность: O(1) - константная память независимо от количества вызововfunction sum(a) { let currentSum = a; function f(b) { currentSum += b; return f; } f.toString = function () { return currentSum; }; return f;}
Каррированный +sum(1)(2)(3)(4) через valueOf
// Временная сложность: O(k) - каждый вызов выполняется за O(1)// Пространственная сложность: O(k) - каждый вызов создаёт новую функциюfunction sum(n) { const f = (x) => sum(n + x); f.valueOf = () => n; return f;}