onion洋葱模型

javascript 复制代码
const log = console.log;
function m1(next) { log(1); next(); log(2); }
function m2(next) { log(3); next(); log(4); }
function m3(next) { log(5); next(); log(6); }

function end() { log('end'); }
function m3_end() { m3(end); }
function m2_end() { m2(m3_end); }
m1(m2_end);
// 打印顺序 1 3 5 end 6 4 2

利用高阶函数

fn => compose();

高阶函数:

  1. 入口参数是函数;
  2. 返回函数;
  3. 两者皆备;
javascript 复制代码
const log = console.log;
function m1(next) { log(1); next(); log(2); }
function m2(next) { log(3); next(); log(4); }
function m3(next) { log(5); next(); log(6); }

let ms = [];
use(m1); use(m2); use(m3);
function use(mx) {
  ms.push(mx);
}

let index = 0;
function compose(index = 0) {
  if (index === ms.length) {
    return () => { log('end') };
  }
  return () => {
    ms[index](compose(index + 1));
  };
}

let fn = compose();
fn();
相关推荐
牵牛老人几秒前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
kingwebo'sZone3 分钟前
C#使用Aspose.Words把 word转成图片
前端·c#·word
froginwe119 分钟前
Python3与MySQL的连接:使用mysql-connector
开发语言
xjt_090123 分钟前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
灵感菇_27 分钟前
Java HashMap全面解析
java·开发语言
杜子不疼.29 分钟前
PyPTO:面向NPU的高效并行张量编程范式
开发语言
lly20240629 分钟前
C# 结构体(Struct)
开发语言
我是伪码农34 分钟前
Vue 2.3
前端·javascript·vue.js
YMWM_40 分钟前
python3继承使用
开发语言·python