关于es6入门中的一段‘嵌套的箭头函数 ’代码,不理解,求解释
const pipeline = (...funcs) =>
val => funcs.reduce((a, b) => b(a), val);
const plus1 = a => a + 1;
const mult2 = a => a * 2;
const addThenMult = pipeline(plus1, mult2);
addThenMult(5)
pipeline函数里的a,b不是应该为函数么,[puls1,mult2]对应funcs,那b(a)怎么理解呀,a,b的值到底是什么呀,想不通,求解释
4 回复
做了下测试,想通了… 上面那个箭头函数等价于
const pipeline = function (…funcs) {
return function (val) {
return funcs.reduce((a,b) => {
return b(a);
},val)
}
}; 其中那个val,是reduce的方法的initialValue值,所以第一次运行时,a = 5,b = [function: plus1],第二次运行a = 6,b = [function: mult2],最后结果为12
b是mult2 a是plus1
其实就是从左到右的函数组合,用fold-right可以实现compose(从右到左),没记错的话ramda.js里关于pipline实现大致就是这样的 参见 https://cnodejs.org/topic/591162809e32cc84569a6cbd#5913fc439e32cc84569a6da3
@Fov6363 谢谢,又重新看了一下array.reduce的解释,已经懂了