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

JS开发中如何避免相同if判断在函数多个位置重复出现

优化方案

方案1:封装条件判断工具函数(改动最小,适合单开关场景)

把重复的if判断提前封装成一个通用执行函数,后续需要判断开关的位置直接调用该函数传入要执行的逻辑即可,无需重复写条件判断。
代码示例:

function doStuffWithJSON(options={}) {
    // 仅需一次判断封装,后续复用
    const runIfEnabled = (action) => options.logAndChuck && action();

    const apiRes = getJSONFromAPI();
    runIfEnabled(() => console.log('we got results successfully'));

    //50行无条件执行的代码
    runIfEnabled(() => console.log('we did stuff with the result'));

    //另外50行无条件执行的代码
    runIfEnabled(() => sendJsonToS3(apiRes));
}

方案2:钩子函数模式(扩展性更强,适合多自定义操作场景)

如果后续可能新增更多可选的执行逻辑,可以把流程节点的回调作为参数开放,用可选链控制执行,完全消除重复判断,同时降低逻辑耦合度。
代码示例:

function doStuffWithJSON(options={}) {
    const apiRes = getJSONFromAPI();
    options.onAfterFetch?.();

    //50行无条件执行的代码
    options.onAfterFirstProcess?.();

    //另外50行无条件执行的代码
    options.onFinal?.(apiRes);
}

// 调用方按需传入对应节点的执行逻辑
doStuffWithJSON({
    onAfterFetch: () => console.log('we got results successfully'),
    onAfterFirstProcess: () => console.log('we did stuff with the result'),
    onFinal: (res) => sendJsonToS3(res)
})

方案选择建议

  • 如果当前只有logAndChuck一个开关,且后续不会新增其他可选操作,选方案1即可,改动成本极低,代码可读性高。
  • 如果后续需要支持调用方自定义不同节点的操作,选方案2,可扩展性更好,不需要修改核心逻辑就能支持新的可选操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:06:04