当前位置:首页 > JavaScript

js实现once

2026-04-06 09:57:43JavaScript

实现 once 函数

在 JavaScript 中,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 Proxy 实现

使用 Proxy 拦截函数调用:

js实现once

function once(fn) {
  let called = false;
  return new Proxy(fn, {
    apply(target, thisArg, args) {
      if (!called) {
        called = true;
        return Reflect.apply(target, thisArg, args);
      }
    }
  });
}

使用示例

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

注意事项

  • 如果函数需要绑定特定的 this 上下文,确保使用 applycall 正确传递。
  • 如果需要支持异步函数,上述实现同样适用,因为 Promise 会保持返回值的引用。

标签: jsonce
分享给朋友:

相关文章

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现图

js实现图

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

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js 实现验证码

js 实现验证码

实现验证码的 JavaScript 方法 生成随机验证码 验证码通常由随机字符(数字、字母或混合)组成。以下代码生成一个 6 位随机验证码(数字和字母混合): function generateCa…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…