Функция сложения, работающая как обычный вызов и через каррирование

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

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

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

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

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

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

Условие

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

add(2, 3); // 5
add(2)(3); // 5

Ответ

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

function add(first, second) {
  if (arguments.length === 1) return value => first + value;
  if (arguments.length === 2) return first + second;
  throw new TypeError('Ожидается один или два аргумента');
}
add(2, 3); // 5
add(2)(3); // 5
add(2, 0); // 2

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

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

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

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

Подробнее