zoukankan      html  css  js  c++  java
  • compose 函数实现

    总结componse函数实现过程

    大致特点

    • 参数均为函数, 返回值也是函数
    • 第一函数接受参数, 其他函数接受的上一个函数的返回值
    • 第一个函数的参数是多元的, 其他函数的一元的
    • 自右向左执行

    简单实现

    第一步: 记录我们传入所有函数的个数

    var compose = function (...args) {
      var len = args.length // 记录我们传入所有函数的个数
      return function f1() {
       //  
      }
    }
    

    第二步: 利用游标记录该运行的函数

    var compose = function (...fns) {
      var len = fns.length // 记录我们传入所有函数的个数
      var index = len - 1 // 游标记录函数执行情况, 也作为我们运行fns中的中函数的索引
      var reslut // 结果, 每次函数执行完成后, 向下传递
      return function f1(...arg1) {
        reslut = fns[index].apply(this, arg1)
        --index
        return f1.call(null, reslut)
      }
    }
    

    第三步: 完成代码

    var compose = function (...fns) {
      var len = fns.length // 记录我们传入所有函数的个数
      var index = len - 1 // 游标记录函数执行情况, 也作为我们运行fns中的中函数的索引
      var reslut // 结果, 每次函数执行完成后, 向下传递
      return function f1(...arg1) {
        reslut = fns[index].apply(this, arg1)
        if (index <= 0) {
          index = len - 1 // 再看这篇文章的时候, 不清楚这里处理index的作用
          return reslut
        } else {
          --index
          return f1.call(null, reslut)
        }
      }
    }
    

    loadsh实现

    直接实现

    使用while迭代完成

    var flow = function (fns) {
      var len = fns.length
    
      // 检查所有参数是否为函数
      var index = len
      while (index--) {
        if (typeof fns[index] !== 'function') {
          throw new TypeError('Expected a function')
        }
      }
    
      return function (...args) {
        var index = 0
        // 传入数组为空, 错误的话, 执行后面的啊, 傻瓜, 竟然卡了这么久, 也真是够了
        var reslut = len ? fns[index].apply(this, args) : args[0]
        while (++index < len) {
          reslut = fns[index].call(this, reslut)
        }
        return reslut
      }
    }
    
  • 相关阅读:
    暑假集训(2)第六弹 ----- Frosh Week(UVA11858)
    暑假集训(2)第五弹 ----- Who's in the Middle(poj2388)
    暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)
    暑假集训(2)第三弹 ----- 食物链(poj1182)
    排序算法
    设计模式
    字符串匹配之KMP实现
    栈的链表简易实现
    单链表简单实现
    EF使用Effort.EF内存数据库单元测试和集成测试
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/9202780.html
Copyright © 2011-2022 走看看