Прошу прощения, если вопрос идиотский. Изучаю 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
.
Прочитайте про каррирование и будет ещё понятнее.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть небольшая проблема при использовании amchartsМне нужно построить такой график (зависимость количества товаров от цены)
Есть SPAДля того, чтобы юзеру не пришлось каждый раз перелогиниваться, сначала смотрю, не просрочен ли у него токен: