В ваших примерах количество параметров в некоторых случаях фиксировано.
Как указал @ASDFGerte, ваши примеры, похоже, возвращают результат после трех вызовов. В этом случае простая реализация без введения таких терминов, как переменная и карри может быть
function add(...args1){
return function(...args2){
return function(...args3){
return args1.concat(args2).concat(args3).reduce((a,b)=>a+b)}}}
console.log(add(1)(2)(3))
console.log(add(1,2)(3,4)(5))
Каждый вызов принимает переменное количество параметров.
Однако было бы неплохо обобщить построение этой структуры вложенных функций, и вы можете сделать это с помощью карри.
Но если вы хотите разрешить произвольное количество вызовов, когда вам следует прекратить возвращать новую функцию и возвращать результат? Нет способа узнать, и это простое, неточное и частичное объяснение, которое даст вам представление о том, почему они сказали, что вы не можете выполнить то, о чем вас просили.
Итак, главный вопрос: возможно ли, что вы неправильно поняли вопрос? Или, может быть, это был трюк, чтобы проверить вас
Редактировать
Другой вариант - вызвать функцию, когда аргументы не переданы, изменить вызов на add(1)(2)(3)()
Вот пример рекурсивной реализации
function sum (...args) {
let s = args.reduce((a,b)=>a+b)
return function (...x) {
return x.length == 0 ? s : sum(s, ...x)
};
}
console.log(sum(1,2)(2,3,4)(2)())
При каждом вызове вычисляет сумму текущих параметров, а затем возвращает новую функцию, которая:
- если вызывается без параметров, просто вернуть текущую сумму
- если переданы другие числа, вызывает рекурсивную сумму, передавая фактическую сумму и новые числа