zoukankan      html  css  js  c++  java
  • 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 中相当重要

  • 相关阅读:
    CSS左侧固定宽 右侧自适应(兼容所有浏览器)
    MySQL学习笔记之一
    删除goagnt证书方法〔chrome
    JS通过ajax动态读取xml文件内容
    display vs visibility
    android SDK更新
    关于JS APP
    Ajax HTML, JS
    Request/Server模式
    关于SOAP
  • 原文地址:https://www.cnblogs.com/-xiao/p/12501098.html
Copyright © 2011-2022 走看看