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

使用闭包时如何提升函数纯度,优化计数器生成文件名的代码实现

函数纯度优化方案

纯函数的核心要求是相同输入始终返回相同输出、无对外副作用,所以我们只需要把原本藏在函数内部/闭包内的可变状态(counter计数)提取为显式入参,同时将更新后的新状态作为返回值的一部分对外透出,即可实现核心逻辑的纯净化,副作用(状态更新、写入文件)统一移到上层调用侧处理即可。


纯函数版核心实现

/**
 * 纯函数:根据传入的当前计数生成新文件名和下一次计数
 * @param {number} currentCounter 当前已使用的最大计数
 * @returns {Object} 生成的文件名和下一次可用计数
 */
function createNewFile(currentCounter) {
  const fileName = `book_${currentCounter}`;
  return {
    fileName,
    nextCounter: currentCounter + 1
  };
}

调用示例

副作用(全局计数更新、文件写入)全部收敛到上层调用逻辑,不污染核心纯函数:

// 上层仅负责维护状态,不参与业务逻辑计算
let currentCounter = 0;

// 生成第一个文件
const { fileName: firstFileName, nextCounter: firstNext } = createNewFile(currentCounter);
currentCounter = firstNext;
// 此处执行写入firstFileName的副作用操作

// 生成第二个文件
const { fileName: secondFileName, nextCounter: secondNext } = createNewFile(currentCounter);
currentCounter = secondNext;
// 此处执行写入secondFileName的副作用操作

优化说明

  • 核心的文件名生成、计数递推逻辑完全纯净化,没有任何外部依赖,也不会修改任何外部变量,单元测试只需直接传入固定计数即可验证输出,无需 mock 外部状态
  • 副作用(写入文件、全局计数更新)全部收敛到上层调用逻辑,避免了核心业务逻辑被副作用污染
  • 如果需要进一步降低上层计数被意外修改的风险,可以将上层计数封装到只读的状态容器中,仅暴露更新计数的专用方法即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:24:03