Каждый вызов может возвращать новую функцию с накопленной суммой, а результат извлекается явным числовым приведением, например +sum(1)(2)(3).
Реализуйте функцию суммирования с цепочкой вызовов вида sum(1)(2)(3).
Каждый вызов может возвращать новую функцию с накопленной суммой, а результат извлекается явным числовым приведением, например +sum(1)(2)(3).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Каждый вызов может возвращать новую функцию с накопленной суммой, а результат извлекается явным числовым приведением, например +sum(1)(2)(3).
function sum(value) {
if (typeof value !== 'number' || !Number.isFinite(value)) {
throw new TypeError('Ожидалось конечное число');
}
function next(number) { return sum(value + check(number)); }
next[Symbol.toPrimitive] = hint => hint === 'string' ? String(value) : value;
return next;
}
function check(value) {
if (typeof value !== 'number' || !Number.isFinite(value)) {
throw new TypeError('Ожидалось конечное число');
}
return value;
}
console.log(+sum(1)(2)(3)); // 6
Само выражение sum(1)(2)(3) возвращает функцию, поэтому способ получения результата нужно оговорить. Новая функция на каждом шаге не изменяет ранее сохранённую цепочку.