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

JavaScript中如何实现SEO达标奖金发放代码仅执行一次

问题修正方案

原有代码核心问题

  • 第二档达标条件写反:规则要求st≥20触发第二档,原有代码写为st<=20,逻辑完全不符合需求
  • 缺少发放状态前置校验:每次调用只要满足st阈值就直接返回奖金,没有先判断对应奖金是否已经发放过,导致重复触发
  • 直达20阈值的场景逻辑缺失:直接达到st≥20时没有同时标记两笔奖金均已发放,后续可能重复触发第一档发放逻辑

修正后代码实现

使用闭包存储发放状态,避免全局变量污染和外部篡改,逻辑覆盖所有边界场景:

// 闭包保留奖金发放状态,仅暴露计算函数
const calculateSEOPrize = (() => {
  let prize1Issued = false; // 15≤st<20档位奖金发放状态
  let prize2Issued = false; // st≥20档位奖金发放状态

  return (st) => {
    // 两笔奖金均已发放,直接返回0
    if (prize1Issued && prize2Issued) return 0;

    // 处理st≥20的场景
    if (st >= 20) {
      // 两笔都未发放,一次性发放6000
      if (!prize1Issued && !prize2Issued) {
        prize1Issued = true;
        prize2Issued = true;
        return 6000;
      }
      // 仅发放过第一笔,发放第二笔3000
      if (prize1Issued && !prize2Issued) {
        prize2Issued = true;
        return 3000;
      }
      return 0;
    }

    // 处理15≤st<20的场景,第一笔未发放时触发
    if (st >= 15 && st < 20 && !prize1Issued) {
      prize1Issued = true;
      return 3000;
    }

    // 其余未达标场景返回0
    return 0;
  };
})();

调用示例

calculateSEOPrize(13) // 0 未达标
calculateSEOPrize(17) // 3000 发放第一笔
calculateSEOPrize(19) // 0 第一笔已发放
calculateSEOPrize(22) // 3000 发放第二笔
calculateSEOPrize(25) // 0 所有奖金已发放

// 直接达标st≥20场景
calculateSEOPrize(21) // 6000 一次性发放两笔
calculateSEOPrize(16) // 0 所有奖金已发放

内容的提问来源于stack exchange,提问作者Noname Taco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:03