修复setTimeout实现的detonatorTimer函数重复输出0与新年祝福语问题
修复detonatorTimer函数的重复输出问题
问题分析
原代码存在两个核心问题,导致重复输出0与祝福语:
- 函数执行时先打印当前delay值,包括传入0的情况,违反了"最后输出祝福语而非0"的要求;
- 两个独立的
if语句,当初始delay为1时,执行delay--后变为0,会触发第二个if提前输出祝福语,同时定时器还会调用detonatorTimer(0),再次打印0和祝福语。
修复后的代码
function detonatorTimer(delay) { if (delay > 0) { console.log(delay); setTimeout(detonatorTimer, 1000, delay - 1); } else { console.log('Happy New Year!'); } } detonatorTimer(3);
修复说明
- 调整逻辑顺序:先判断当前delay的状态,再决定输出内容
- 当
delay > 0时,打印当前数字,通过定时器传入delay - 1(避免修改当前变量引发判断错误) - 当
delay === 0时,直接输出祝福语,不再打印0 - 改用
else替代独立的if判断,确保逻辑互斥,避免重复触发祝福语
测试调用detonatorTimer(3)的输出顺序为:
3 2 1 Happy New Year!
内容的提问来源于stack exchange,提问作者And So What
相关产品推荐
相关产品推荐

