关于es6入门中的一段‘嵌套的箭头函数 ’代码,不理解,求解释
发布于 7 年前 作者 webcainiao 4364 次浏览 来自 问答
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的解释,已经懂了

回到顶部