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();
相关推荐
程序员二叉4 分钟前
【Java】String 全套高频面试题详解
java·开发语言·面试
阿里嘎多学长10 分钟前
2026-06-07 GitHub 热点项目精选
开发语言·程序员·github·代码托管
字节高级特工10 分钟前
C++11(三)终极指南:可变参数模板与包装器详解
java·开发语言·c++·后端
半岛@少年13 分钟前
Webpack在前端项目中究竟发挥什么作用?
前端·webpack·前端工程化
2501_9400417414 分钟前
企业官网与品牌落地页,能直接交付的前端题目
前端
川冰ICE15 分钟前
JavaScript高级④|类(class)与面向对象,ES6现代写法
开发语言·javascript·es6
小番茄夫斯基21 分钟前
全球大模型的价格和能力排行汇总
前端·后端·架构
Sirius Wu22 分钟前
Agent模型冷启动问题
开发语言·javascript·人工智能·机器学习·ecmascript·aigc
小小小小宇34 分钟前
前端领域 30 个值得安装的 Agent Skills
前端
xkxnq36 分钟前
第八阶段:工程化、质量管控与高级拓展(132天),Vue项目文档自动化:VuePress搭建组件文档(组件示例+API说明)
javascript·vue.js·自动化