Javascript: запись fn(arg1)(arg2)…(argN)

124
19 августа 2019, 16:30

Прошу прощения, если вопрос идиотский. Изучаю JS и функциональное программирование, и не совсем понимаю что означает данная запись. Хотелось бы понять, что в общих чертах происходит тут?

Answer 1

Всё очень просто. Представьте, что есть функция:

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.

Прочитайте про каррирование и будет ещё понятнее.

READ ALSO
Как убрать zoom на amcharts 4?

Как убрать zoom на amcharts 4?

Есть небольшая проблема при использовании amchartsМне нужно построить такой график (зависимость количества товаров от цены)

136
как удалить картинку js? [закрыт]

как удалить картинку js? [закрыт]

Решение вашей задачи:

127
Как правильно обновлять access (JWT) токен в SPA?

Как правильно обновлять access (JWT) токен в SPA?

Есть SPAДля того, чтобы юзеру не пришлось каждый раз перелогиниваться, сначала смотрю, не просрочен ли у него токен:

136