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();
相关推荐
toooooop82 分钟前
本地开发环境webScoket调试,保存html即用
前端·css·websocket
山有木兮木有枝_8 分钟前
手动封装移动端下拉刷新组件的设计与实现
前端
阳光阴郁大boy9 分钟前
大学信息查询平台:一个现代化的React教育项目
前端·react.js·前端框架
小菜全16 分钟前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架
人衣aoa16 分钟前
Python编程基础(八) | 类
开发语言·python
AlexMercer101219 分钟前
[前端]1.html基础
前端·笔记·学习·html
晚云与城24 分钟前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++
白水清风27 分钟前
关于Js和Ts中类(class)的知识
前端·javascript·面试
前端Hardy29 分钟前
只用2行CSS实现响应式布局,比媒体查询更优雅的布局方案
javascript·css·html
小莞尔30 分钟前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机