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