Функция сложения с поддержкой частичного вызова

Каждый непустой вызов возвращает новое замыкание с накопленной суммой. Пустой вызов завершает цепочку и возвращает число; add() без исходных аргументов даёт 0.

Короткий ответ

Что ответить на собеседовании

Каждый непустой вызов возвращает новое замыкание с накопленной суммой. Пустой вызов завершает цепочку и возвращает число; add() без исходных аргументов даёт 0.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию add, умеющую принимать аргументы частично. Она должна позволять вызывать её последовательно, каждый раз добавляя к общему результату переданные числа. Если вызвать функцию без параметров, она должна вернуть накопленную сумму.

Ответ

Каждый непустой вызов возвращает новое замыкание с накопленной суммой. Пустой вызов завершает цепочку и возвращает число; add() без исходных аргументов даёт 0.

function add(...values) {
  function collect(total) {
    return (...next) => next.length
      ? collect(next.reduce((sum, value) => sum + value, total))
      : total;
  }
  return values.length
    ? collect(values.reduce((sum, value) => sum + value, 0))
    : 0;
}
add(1)(2, 3)(4)(); // 10
const plusOne = add(1);
plusOne(2)(); // 3
plusOne(5)(); // 6

Предполагаются числовые аргументы. Замыкания не изменяют предыдущее накопленное значение, поэтому ответвления одной цепочки не влияют друг на друга.

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

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

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

Подробнее