这段代码按年龄过滤用户,并返回一个超过 18 岁的姓名数组。但是“ functions.reduceRight((arg, fn) => fn(arg), args) ”行到底是做什么的呢?
const compose = (...functions) =>
args => functions.reduceRight((arg, fn) => fn(arg), args);
compose(map(u => u.name), filter(u => u.age >= 18))
这段代码按年龄过滤用户,并返回一个超过 18 岁的姓名数组。但是“ functions.reduceRight((arg, fn) => fn(arg), args) ”行到底是做什么的呢?
const compose = (...functions) =>
args => functions.reduceRight((arg, fn) => fn(arg), args);
compose(map(u => u.name), filter(u => u.age >= 18))
让我们弄清楚
const compose = (...functions) ...- 使用数组中收集的参数声明箭头函数functionscompose(map(u => u.name), filter(u => u.age >= 18))- 使用参数调用 compose:functions[0] = map(u => u.name) и functions[1] = filter(u => u.age >= 18);args => functions.reduceRight((arg, fn) => fn(arg), args);- 可以这样改写(args) => { return functions.reduceRight((arg, fn) =>{ return fn(arg);}, args);}所以我们必须
functions.reduceRight((arg, fn) =>{ return fn(arg);}, args);- 这一行调用reduceRight一个数组,其中我们的函数与累加器functions的初始值坐在一起,并在每次迭代时更改它的值,或者如果你绘制它。argsargfn(arg)我希望这变得更清楚了。