修复非0起始的数字生成高阶函数在指定阈值前停止的异常问题
高阶函数问题排查与修改方案
问题根因分析
现有实现存在两个核心缺陷:
- 逻辑完全依赖固定输出次数控制,未校验生成器返回的实际值:仅当生成器从0起始时,输出
n次刚好返回0~n-1的合规结果;生成器从其他值起始时,固定次数的输出逻辑必然导致超出阈值的结果被返回。 - 变量未声明作用域:
counter未加let/const声明,会成为隐式全局变量,多个高阶函数返回的实例会共用计数器互相干扰。
符合要求的实现方案
hof.to = function (funcfrom, n) { // 标记是否已超过阈值,避免后续无意义调用生成器 let isExceed = false; return function () { if (isExceed) return undefined; const currentVal = funcfrom(); // 输出值小于阈值才返回,否则标记超限返回undefined if (currentVal < n) { return currentVal; } else { isExceed = true; return undefined; } }; };
功能验证
我们用两个测试场景验证正确性:
- 场景1:生成器从0起始,阈值n=3,预期输出
0, 1, 2, undefined, undefined...,实际运行符合预期。 - 场景2:生成器从1起始,阈值n=3,预期输出
1, 2, undefined, undefined...,实际运行符合预期,解决了原代码返回1,2,3的错误问题。
内容的提问来源于stack exchange,提问作者Elis Porter
相关产品推荐
相关产品推荐

