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();
相关推荐
while(1){yan}1 分钟前
文件IO的常识
java·开发语言·青少年编程·电脑常识
进击的荆棘21 分钟前
C++起始之路——类和对象(下)
开发语言·c++
Calm55025 分钟前
ele表单未输入值提示为英文
前端
帅得不敢出门25 分钟前
精简Android SDK(AOSP)的git项目提高git指令速度
android·java·开发语言·git·elasticsearch
liu****27 分钟前
10.排序
c语言·开发语言·数据结构·c++·算法·排序算法
爱写Bug的小孙27 分钟前
Tools、MCP 和 Function Calling
开发语言·人工智能·python·ai·ai编程·工具调用
小小Fred29 分钟前
FreeRTOS函数prvInitialiseNewTask解析
java·开发语言
小杜的生信筆記36 分钟前
基于R语言绘制网络图,新人选手上手
开发语言·r语言·生物信息学·组学
小码哥06839 分钟前
家政服务管理-家政服务管理平台-家政服务管理平台源码-家政服务管理平台java代码-基于springboot的家政服务管理平台
java·开发语言·spring boot·家政服务·家政服务平台·家政服务系统·家政服务管理平台源码
爪洼守门员40 分钟前
前端性能优化
开发语言·前端·javascript·笔记·性能优化