getNumber
- функция, в первый аргумент предполагается число (аргумент x
), сама функция возвращает другую функцию, которая и возвращает аргумент, написанный вами в аргументах функции.
Пример:
const getNumber = x => (f = x => x) => f(x);
const функция_возвращающая_число_42 = getNumber(42)
const число_42 = функция_возвращающая_число_42()
console.log(число_42)
setOperator
- функция, принимающая в аргумент другую функцию (аргумент f
), сама функция setOperator
возвращает ещё одну функцию в первый аргумент, который вписывается число y
. А сама эта функция (та которая принимает число y
), возвращает ещё одну анонимную функцию, в которую в свою очередь вписывается число x
, уже при вызове этой функции (принимающей число x
), вызывается та самая функция f
которую мы написали в аргументы setOperator
в самом начале.
Пример:
const setOperator = f => y => x => f(x, y);
const функция_принимающая_y = setOperator((x, y) => x + y)
const функция_принимающая_x = функция_принимающая_y(2)
const результат_сложения_x_и_y = функция_принимающая_x(2)
console.log(результат_сложения_x_и_y)
Если, разбирать код на части, то получится вот такая вот каша:
const получить_функцию_возвращающую_первый_аргумент /* getNumber */ = x => (f = x => x) => f(x);
const получить_функцию_возвращающую_анон_функцию_принимающую_y /* setOperator */ = f => y => x => f(x, y);
const функция_возвращающая_число_5 /* five */ = получить_функцию_возвращающую_первый_аргумент(5);
const функция_принимающая_y /* plus */ = получить_функцию_возвращающую_анон_функцию_принимающую_y((x, y) => x + y);
const функция_принимающая_x_у_которой_y_равен_5 /* plus(five()) */ = функция_принимающая_y(функция_возвращающая_число_5())
const результат_сложения_x_и_y /* five(plus(five())) */ = функция_принимающая_x_у_которой_y_равен_5(функция_возвращающая_число_5())
console.log(результат_сложения_x_и_y)
P.S. код такой, что сам чёрт ногу сломит.