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

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现隐藏div

js实现隐藏div

隐藏div的几种方法 使用JavaScript隐藏div元素可以通过多种方式实现,以下是几种常见的方法: 方法一:修改style.display属性 将div的display属性设置为"none"…