• JS


    compose 函数就是将几个有特点的函数拼凑在一起, 让它们结合, 产生一个崭新的函数。

    作用:可以把一个函数的运行结果当作实参传给下一个函数,即实现层级嵌套的函数调用扁平化。

    比如有这样的需求,要输入一个名字,这个名字由 firstNamelastName 组合而成,然后把这个名字全部变成大写输出来,比如输入 seaxiao,我们就要打印出来,‘HELLO, SEA XIAO’。我们考虑用函数组合的方法来解决这个问题,需要两个函数 greeting ,  toUpper

        var greeting = (firstName, lastName) => 'hello, ' + firstName + ' ' + lastName;
        var toUpper = str => str.toUpperCase();
        var fn = compose(toUpper, greeting);
        console.log(fn('sea', 'xiao'));

    这个简单版的 compose 就可以解决

    const compose = (fn2,fn1) => (firstName,lastName)=> fn2(fn1(firstName,lastName))

    如果还想再加一个处理函数,不需要修改 fn,只需要在执行一个 compose ,比如我们再想加一个 toLower,只需要这样做

        var toLower = str => str.toLowerCase();
        var newFn = compose(trim, fn)
        console.log(newFn('sea', 'xiao'))

    但是如果我们想一次性传入两个及以上的参数,这个简版的 compose 就不能满足要求,以下就是修改版的 compose:

        function compose(...funcs) {
          // 传递的函数集合
          return function (...args) {
            let length = funcs.length;
            if (length == 0) {
              //=>一个函数都不需要执行,直接返回ARGS
              return args;
            }
            if (length == 1) {
              //=>只需要执行一个函数,把函数执行,把其结果返回即可
              return funcs[0](...args)
            }
            return funcs.reduce((x,y)=> typeof x === "function" ? x(y(...args)) : y(...args))
          }
        }

    reduce 递归在 compose 中相当重要

  • 相关阅读:
    面向对象
    原型链
    HTTP协议
    java连接数据库(jdbc)调用配置文件
    MySQL-学习笔记
    JAVA-集合框架
    JAVA-多线程
    java中的try-catch-finally异常处理(学习笔记)
    ADO.NET增、删、改、查
    C#资源管理器
  • 原文地址:https://www.cnblogs.com/-xiao/p/12501098.html
Copyright © 2020-2023  润新知