JS如何实现函数调用次数限制?现有代码报错求正确实现方案
问题原因
- 你的现有实现不符合函数要求:
limitCalls需要返回一个新的函数供后续调用,但你直接在调用limitCalls时就执行了计数逻辑并返回了fn()的执行结果/undefined,所以赋值给limitedIncrementA的不是函数,调用时自然抛出limitedIncrementA is not a function错误。 - 计数变量
calls定义在全局作用域,所有通过limitCalls生成的限制函数会共用同一个计数,无法满足多个实例独立计数的需求。
正确实现代码
export default function limitCalls(fn, maxCalls) { // 每个限制函数独立维护调用次数 let callCount = 0 // 返回新函数,供后续调用 return function (...args) { if (callCount < maxCalls) { callCount++ // 透传执行上下文和参数,保证原函数行为不受影响 return fn.apply(this, args) } return undefined } }
适配说明
上面的实现完全匹配测试用例的预期:
- 调用
limitCalls返回的是函数,赋值给limitedIncrementA、limitedIncrementB后可正常调用 - 每个限制函数的调用次数独立统计,互相不会干扰
- 调用次数达到上限后,后续调用统一返回
undefined
内容的提问来源于stack exchange,提问作者ivan239
相关产品推荐
相关产品推荐

