当前位置: 首页 > news >正文

实现一个once函数,传入函数参数只执行一次

说明:
在js中,包装函数是一个很重要的手法。模板比较通用:
1、包装函数中的一个参数是函数,
2、包装函数最终会返回一个函数,
3、使用闭包来保存一个状态。

/**
 * 创建一个只执行一次的函数包装器
 * @param {Function} fn - 要包装的函数
 * @returns {Function} - 包装后的函数
 */
function once(fn) {
  let hasBeenCalled = false;
  let result;

  return function (...args) {
    if (!hasBeenCalled) {
      hasBeenCalled = true;
      result = fn.apply(this, args);
    }
    return result;
  };
}

// 使用示例
const example = once((x) => {
  console.log("函数被调用,参数:", x);
  return x * 2;
});

console.log(example(5)); // 输出: 函数被调用,参数: 5, 10
console.log(example(10)); // 输出: 10 (不会再次执行函数)
console.log(example(15)); // 输出: 10 (不会再次执行函数)

相关文章:

  • AI推理胜过人脑?思维模型!【33】心流理论思维模型
  • Vue 的 nextTick 是如何实现的?
  • Docker中设置default-ulimits参数解决资源限制问题
  • 尝试想一下,三进制电脑应该怎么玩(一)
  • 解锁Nginx路由器匹配规则
  • 【CSS】入门基础
  • CSS3学习教程,从入门到精通, CSS3 列表控制详解语法知识点及案例代码(24)
  • QListView开发入门
  • CUDA Memory Fence 函数的功能与硬件实现细节
  • Dubbo分布式开发框架
  • HarmonyOS(扩展篇四):工业互联网操作系统
  • Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十二)
  • Spring Boot 3.4.3 基于 Caffeine 实现本地缓存
  • MyBatis-Plus 从入门到精通教学文档
  • 高等数学-第七版-上册 选做记录 习题7-5
  • ANSYS Scade One Swan语言与Scade 6的区别 - 状态机部分的改变
  • Go后端架构探索:从 MVC 到 DDD 的演进之路
  • 1_vue基本_插件
  • 从代码学习数值优化算法 - 拉格朗日对偶方法 Python 版
  • CVE-2025-30208(文件读取)漏洞复现