对于es6中管道机制的理解

在看到阮一峰老是的ES6中函数提升--管道机制的时候,一头污水.学习后说一下自己的理解.

//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)

说明:
1.reduce()是干什么用的
2.管道机制是啥意思

首先reduce()是一个数组的方法,执行时它会将数组中的每一个元素按照传入的函数规则处理一遍,它有一套自己的执行规则。
reduce()接收一个处理函数,该函数中接收四个参数。
1.第一个参数total:当数组从索引0开始执行的时候,第一个参数代表数组中的第一个索引对应的值。再次执行时就会变成上一次执行完的结果.
2.第二个参数currentValue
第一次运行的时候为索引1的值,再次执行时会变成循环后的当前值。
3.第三个参数currentIndex
接收一个当前索引值
4.第四个参数arr
原数组
reduce(fn(),第二个参数)initialValue
reduce函数的第二个参数时传递给形参1函数的默认值。

function(total,currentValue, index,arr) 必需。用于执行每个数组元素的函数。
函数参数:
参数  描述
total   必需。初始值, 或者计算结束后的返回值。
currentValue    必需。当前元素
currentIndex    可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
reduce()的第二个形参
initialValue    可选。传递给函数的初始值

管道机制
管道机制好像链式编程,以return的形式持续操作,
因为内部函数拿到的是外部函数funcs中的数据,所以我认为利用的是闭包原理。

//
re = function(...funcs){
    console.log(funcs)
     return funcs.reduce(function(a,b){return b(a)})
}
const res = re(plus1(5),mult2)

console.log(res)
//这里我们看到reduce()方法的运行机制
...funcs数组的展开运算符,在添加多个实参时funcs变为数组.
//在调用时reduce()的参数1执行完之后被参数2调用。最后返回。

最终得到这样一种写法:

const plus1 = a => a + 1;
const mult2 = a => a * 2;
es = (...funcs) => funcs.reduce((a,b)=> b(a))
const res1 = es(plus1(5),mult2)
console.log(res1)
//12

//最终的问题是在什么时候使用。

你可能感兴趣的:(对于es6中管道机制的理解)