Реализуйте функцию суммирования с цепочкой вызовов вида 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) возвращает функцию, поэтому способ получения результата нужно оговорить. Новая функция на каждом шаге не изменяет ранее сохранённую цепочку.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее