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();
相关推荐
摸鱼的春哥13 小时前
吃龙虾🦞咯!万字拆解OpenClaw的架构与设计
前端·javascript·后端
恋猫de小郭13 小时前
什么 AI 写 Android 最好用?官方做了一个基准测试排名
android·前端·flutter
anOnion1 天前
构建无障碍组件之Switch Pattern
前端·html·交互设计
华洛1 天前
多写点skill吧,写的越多这行业死的越快。
前端·javascript·产品
剪刀石头布啊1 天前
从函数式编程介绍
前端
vjmap1 天前
全新唯杰WebCAD编辑平台发布:全面拥抱AI,WebCAD智能体(Agent)来了
前端·gis·ai编程
剪刀石头布啊1 天前
扫码登录方式
前端
剪刀石头布啊1 天前
浏览器指纹
前端
剪刀石头布啊1 天前
前端截图html2canvas
前端
IT_陈寒1 天前
别再死记硬背Python语法了!这5个思维模式让你代码量减半
前端·人工智能·后端