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
      }
    }
    
  • 相关阅读:
    Qomolangma实现篇(二):命名空间和别名子系统的实现
    关于Borland's IDE:发生了就发生了吧!
    Qomolangma实现篇(六):Qomo的OOP框架的实现技术
    Qomolangma实现篇(八):Qomo中的AOP框架
    经典的《JavaScript 权威指南》中的“对象”不经典
    Qomo OpenProject beta1 发布!
    弹出当前索引号案例
    tab栏切换效果案例
    [USACO18DEC]Sort It Out P
    [ABC163F]path pass i
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/9202780.html
Copyright © 2011-2022 走看看