当前位置:首页 > JavaScript

js实现once

2026-02-01 17:01:55JavaScript

实现 once 函数的方法

once 函数的作用是确保某个函数只能被调用一次,后续调用不再执行。以下是几种实现方式:

js实现once

使用闭包和标志位

通过闭包保存一个标志位,记录函数是否已被调用过:

js实现once

function once(fn) {
  let called = false;
  return function(...args) {
    if (!called) {
      called = true;
      return fn.apply(this, args);
    }
  };
}

利用函数属性

将调用状态直接存储在函数对象上:

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

高阶函数简洁写法

使用 ES6 箭头函数简化代码:

const once = (fn) => {
  let called = false;
  return (...args) => called ? undefined : (called = true, fn(...args));
};

示例用法

const logOnce = once(console.log);
logOnce("Hello"); // 输出 "Hello"
logOnce("World"); // 无输出

注意事项

  • 如果需要在多次调用时返回首次的结果,可以缓存结果:
    function once(fn) {
      let result;
      let called = false;
      return function(...args) {
        if (!called) {
          called = true;
          result = fn.apply(this, args);
        }
        return result;
      };
    }
  • 在类方法中使用时,需确保 this 绑定正确。

标签: jsonce
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterv…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…