在看到阮一峰老是的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
//最终的问题是在什么时候使用。
网友评论