函数式编程
函数式编程是一种编程范式。它把计算当成是数学函数的求值,从而避免改变状态和使用可变数据。它是一种声明式的编程范式,通过表达式和声明而不是语句来编程
function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
return funcs.reduce((a, b) => {
return (...args) => {
return a(b(...args))
}
})
}
function fn1(x) {
console.log('a')
return x + 1
}
function fn2(x) {
console.log('b')
return x + 2
}
function fn3(x) {
console.log('c')
return x + 3
}
function fn4(x) {
console.log('d')
return x + 4
}
let composedFn = compose(fn1,fn2,fn3,fn4)
let result = composedFn(1)
第一步,循环返回的第一个值是函数X,看下一步,所以X的参数就是fn3的返回值,
也就是说fn2的参数就是fn3的返回值
(...args) => {
return fn1(fn2(...args))
}
第二步, 循环返回的第二个值是函数Y
(...args) => {
return X(fn3(...args))
}
第三步,reduce返回的第三个值是函数Z,这个函数作为reduce的最终返回值赋值给了composedFn
(...args) => {
return Y(fn4(...args))
}
第四步,执行composedFn(1),也就是上一步fn4的参数是1.连起来执行就是从后往前一个一个执行
let composedFn = compose(fn1,fn2,fn3,fn4)
let result = composedFn(1)
柯里化
在计算机科学中,柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
上面redux的例子中函数式编程用的很好,柯里化还真没在网上看到好的例子,全是a+b
的例子...