最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
闭包实现函数多次执行过滤
时间: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
- 支持同步/异步混合场景,比如鉴权失败时中断后续执行
- 可叠加使用:一个函数可同时被限流闭包、日志闭包、权限闭包包裹
相关文章
- 商汤日日新开发者免费使用:模型选择、令牌额度与调用说明 06-19
- 2026拼图游戏app哪些值得下载 质量高的拼图游戏app大全 06-19
- 米姆米姆哈id是否能重复 06-19
- 商汤日日新开发者注册与登录:账号配置与权限说明 06-19
- 商汤日日新开发者账号权限:配置要点与适用范围 06-19
- 商汤日日新开发者入口在哪?Token领取与API权限配置说明 06-19