如何通过JavaScript闭包函数调用实现同一值连续返回n次?
原代码问题说明
你的实现存在两个核心错误,无法达到预期效果:
- 缺少「单值重复返回次数」的计数逻辑,每次调用内部函数都会直接移动数组索引,不可能实现同一个值连续返回n次的效果
- 传入
num参数时的for循环没有实际作用:第一次循环执行到return increment就直接终止函数返回结果了,和直接返回increment没有任何区别
实现方案
闭包需要同时维护两个状态变量才能满足需求:一个记录当前读取的数组索引,一个记录当前值已经返回的次数。当返回次数达到指定的n次时,再移动数组索引、重置返回计数;数组遍历到末尾时自动循环回到第一个元素即可。
完整实现代码:
function getCurrentValue(values, repeatNum = 1) { let currentIndex = 0; let count = 0; const len = values.length; return function () { const res = values[currentIndex]; count++; // 当前值返回次数达标,切换到下一个值 if (count >= repeatNum) { currentIndex = (currentIndex + 1) % len; count = 0; } return res; }; }
效果验证
使用你提供的示例调用测试,返回结果完全符合预期:
let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3); value() // 返回 0 value() // 返回 0 value() // 返回 0 value() // 返回 315 value() // 返回 315 value() // 返回 315 value() // 返回 270 value() // 返回 270 value() // 返回 270
内容的提问来源于stack exchange,提问作者Antonio Pavicevac-Ortiz
相关产品推荐
相关产品推荐

