如何实现可限制callback回调函数执行次数的limitedFunction函数?
限制回调执行次数的limitedFunction实现
核心原理
利用JavaScript的闭包特性存储允许的剩余执行次数,每次调用返回的新函数时先校验剩余次数,次数未耗尽则执行回调并扣除次数,否则直接返回超限提示。
适配你给出的调用场景的实现代码
function limitedFunction(maxExecTime, cb) { // 闭包变量,记录剩余可执行次数,外部无法直接修改 let remainingExecCount = maxExecTime return function (argsArray) { if (remainingExecCount > 0) { remainingExecCount-- // 展开传入的数组参数,传入回调执行 return cb(...argsArray) } return 'over limit' } }
测试验证
let fn = limitedFunction(3, (a,b,c)=>a+b+c) fn([1,2,3]) // 输出 6 fn([1,2,3]) // 输出 6 fn([1,2,3]) // 输出 6 fn([1,2,3]) // 输出 over limit fn([1,2,3]) // 输出 over limit
通用场景扩展
如果需要支持直接传入多参数(如fn(1,2,3)而非传入数组),可以调整为以下通用写法:
function limitedFunction(maxExecTime, cb) { let remainingExecCount = maxExecTime // 接收任意数量的入参 return function (...args) { if (remainingExecCount > 0) { remainingExecCount-- return cb(...args) } return 'over limit' } }
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

