Прошу прощения, если вопрос идиотский. Изучаю JS и функциональное программирование, и не совсем понимаю что означает данная запись. Хотелось бы понять, что в общих чертах происходит тут?
Всё очень просто. Представьте, что есть функция:
function test1(x) {
return { foo: x + 10 };
На вызов test1(5) функция вернёт объект { foo: 15 }:
const result = test1(5);
console.log(result.foo); // 15
У нас нет необходимости записывать результат в отдельную переменную и мы спокойно можем вывести число 15 следующим синтаксисом:
console.log(test1(5).foo) // 15
то есть после закрытия скобки в данном месте нужно считать, что у нас есть результат вызова функции.
А теперь посмотрим на функцию test2:
function test2(x) {
return function(y) {
return { foo: x, bar: y }
}
}
Наша test2 возвращает функцию, которая принимает аргумент и возвращает объект {
foo: x, bar: y }. Пример вызова:
const newFunction = test2(5);
console.log(newFunction(10)); // { foo: 5, bar: 10 }
Однако нам так же нет необходимости заводить отдельную переменную и мы можем воспользоваться уже известным синтаксисом:
console.log(test2(5)(10));
На всё это дело нужно смотреть как на вызов функции, полученной после вызова функции test2.
Для вашего примера:
fn(arg1)(arg2)...(argn)
нужно читать:
вызов функции, полученной после предыдущего вызова функции, полученной после предыдущего вызова функции,... полученной после вызова функции fn.
Прочитайте про каррирование и будет ещё понятнее.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости