组合函数的2种写法

319 阅读1分钟

无非就是把前一个函数的返回值作为后一个返回值的参数,当直接到最后一个函数的时候,就返回

写法一:

function compose(...args) {
    return (result) => {
        return args.reduceRight((result, fn) => {
          return fn(result)
        }, result)
  }
}

写法二

function compose(...funcs) {
	if (funcs.length === 0) {
		return arg => arg
	}
	if (funcs.length === 1) {
		return funcs[0]
	}
	return funcs.reduce((a, b) => (...args) => a(b(...args)))
}