You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复setTimeout实现的detonatorTimer函数重复输出0与新年祝福语问题

修复detonatorTimer函数的重复输出问题

问题分析

原代码存在两个核心问题,导致重复输出0与祝福语:

  1. 函数执行时先打印当前delay值,包括传入0的情况,违反了"最后输出祝福语而非0"的要求;
  2. 两个独立的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:50:34