当前位置:首页 > 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 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…