闭包通过私有作用域封装状态实现函数多次执行过滤,包括限次调用、防覆盖、多级条件组合及前后拦截等场景,支持动态配置与链式复用。
闭包能天然实现函数的“多次执行过滤”,核心是把执行状态(比如次数、时间戳、请求ID)封在私有作用域里,让每次调用都可感知历史上下文,从而决定是否放行、跳过、合并或覆盖——不是靠外部变量控制,而是靠函数自己“记住”规则。
用闭包封装计数器,实现“最多执行N次”:
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 拦截,本质也是执行过滤的一种: