一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

闭包实现函数多次执行过滤

时间:2026-06-19 09:48:52 编辑:袖梨 来源:一聚教程网

闭包通过私有作用域封装状态实现函数多次执行过滤,包括限次调用、防覆盖、多级条件组合及前后拦截等场景,支持动态配置与链式复用。

闭包能天然实现函数的“多次执行过滤”,核心是把执行状态(比如次数、时间戳、请求ID)封在私有作用域里,让每次调用都可感知历史上下文,从而决定是否放行、跳过、合并或覆盖——不是靠外部变量控制,而是靠函数自己“记住”规则。

限制调用次数

用闭包封装计数器,实现“最多执行N次”:

  • 计数变量定义在外层函数内,外部无法篡改
  • 返回的新函数每次调用前检查计数,超限则拒绝执行(抛错、返回默认值或静默忽略)
  • 正确透传 this 和所有参数,避免上下文丢失:用 fn.apply(this, args) 或展开语法
  • 支持自定义阈值和响应行为,例如:limitCall(apiFetch, 3, { onError: () => console.warn('已禁用') })

只执行最后一次请求

适用于按钮连点、搜索框频繁输入等场景,避免旧请求结果覆盖新逻辑:

  • 不依赖 abort(),而用递增序号标记每次调用
  • 回调中比对当前序号与全局最新序号,仅当相等时才处理结果
  • 闭包保存最新序号,确保多个调用共享同一判断依据
  • 示例:let latestId = 0; return function() { const id = ++latestId; fetch(...).then(res => id === latestId && handle(res)) }

多级条件联合过滤

把多个业务规则封装成独立闭包,再组合成链式过滤器:

  • 每个闭包持有自己的配置(如脱敏位数、角色权限列表、缓存有效期)
  • 通过 reduce 链式叠加,前一个输出作为后一个输入
  • 例如数据分发前依次做:手机号掩码 → 邮箱局部隐藏 → 身份证保段 → 角色可见性校验
  • 不同角色可动态组装不同闭包序列,复用性强、耦合低

拦截并增强执行流程

在函数调用前后插入逻辑,形成 Before/After 拦截,本质也是执行过滤的一种:

  • 闭包保存原函数 + before 回调 + after 回调,三者共享作用域
  • 调用时自动触发 before → 执行原函数 → after,中间可修改参数、捕获异常、处理 Promise
  • 支持同步/异步混合场景,比如鉴权失败时中断后续执行
  • 可叠加使用:一个函数可同时被限流闭包、日志闭包、权限闭包包裹

热门栏目