Создание функции с поддержкой каррирования

Пустой вызов возвращает накопленную сумму; непустой создаёт следующий шаг цепочки. Завершение проверяйте по arguments.length, чтобы ноль не прерывал накопление.

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

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

Пустой вызов возвращает накопленную сумму; непустой создаёт следующий шаг цепочки. Завершение проверяйте по arguments.length, чтобы ноль не прерывал накопление.

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

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

Условие

Необходимо написать функцию, которая поддерживает последовательные вызовы с одним аргументом и возвращает текущую сумму только при вызове без аргументов. Поведение функции должно соответствовать следующим примерам:

sum() == 0
sum(1)() == 1
sum(1)(4)() == 5
sum(5)(2)(2)() == 9

Функция должна корректно обрабатывать любое количество вложенных вызовов, аккумулируя переданные числа и выдавая их сумму в момент, когда вызов происходит без параметров.

Ответ

Пустой вызов возвращает накопленную сумму; непустой создаёт следующий шаг цепочки. Завершение проверяйте по arguments.length, чтобы ноль не прерывал накопление.

function sum(value) {
  if (arguments.length === 0) return 0;
  return function next(number) {
    if (arguments.length === 0) return value;
    return sum(value + number);
  };
}

sum() даёт 0, sum(1)(4)() — 5, sum(5)(2)(2)() — 9. Аргументы предполагаются числами; без завершающего пустого вызова результатом остаётся функция. Каждый шаг хранит своё накопленное значение, поэтому ранее полученные частичные цепочки можно использовать независимо.

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

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

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

Подробнее