如何创建执行多重组合的函数?

How can I create a function that performs multiple composition?

我想组合两个或多个函数来产生一个新函数。

如何创建一个函数,通过返回一个接受一个参数的函数来执行从左到右的函数组合?

例如:

const square = v => v * v;
const double = v => v * 2;
const addOne = v => v + 1;

const cal = myFunction(square, double, addOne);
cal(2) // 9; addOne(double(square(2)))

您可能 myFunction 将传递的函数转换为带有剩余参数的数组,然后 return 一个使用 reduce 遍历数组的函数,传入传递的参数作为初始值:

const myFunction = (...fns) => arg => fns.reduce(
  (a, fn) => fn(a),
  arg
);

const square = v => v * v;
const double = v => v * 2;
const addOne = v => v + 1;

const cal = myFunction(square, double, addOne);
console.log(cal(2)) // 9; addOne(double(square(2)))