乐趣区

关于前端:什么是函数组合

函数组合

原文链接:https://note.noxussj.top/?source=sifo

什么是函数组合?

函数组合(Compose),如果一个函数要通过多个函数解决能力失去最终值,这个时候能够把两头过程的函数合并成一个函数。函数组合默认是从右到左执行,每个函数只能接管一个参数,否则需应用柯里化进行转换。

作用

函数组合能够让咱们把细粒度的函数重新组合生成一个新的函数。

规定

函数的组合要满足结合律(associativity),无论先联合后面几个参数或者是先联合前面几个参数返回的后果都是一样的。相似于数学中的加法,1 + 2 + 3 中的 (1 + 2) + 3 或者 1 + (2 + 3) 返回的后果都是一样的。


常见问题

纯函数和柯里化很容易写出洋葱代码 a(b(c(d))),两头哪个环节呈现问题,不容易排查。

为什么函数组合默认是从右往左执行,因为这样更加靠近于函数调用的写法,a(b(c(d)))。


根底案例

函数组合

        // 函数组合(从右往左执行)function compose(...args) {return function (value) {return args.reverse().reduce((a, fn) => fn(a), value)
        }
    }
    
    // 反转数组
    const reverse = (arr) => arr.reverse()
    
    // 取第一项值
    const first = (arr) => arr[0]
    
    // 转换为大写
    const toUpper = (s) => s.toUpperCase()
    
    const f = compose(toUpper, first, reverse)
    
    f(['a', 'b', 'c']) // C

判断是否满足结合律

    const f3 = compose(compose(toUpper, first), reverse)
    
    const f3 = compose(toUpper, compose(first, reverse))
    
    let associative = f2(['a', 'b', 'c']) === f3(['a', 'b', 'c']) // true

原文链接:https://note.noxussj.top/?source=sifo

退出移动版