当前位置:首页 > JavaScript

js实现once

2026-03-14 16:07:27JavaScript

实现 once 函数的方法

在 JavaScript 中,once 函数通常用于确保某个函数只能被调用一次,后续调用不会再次执行。以下是几种实现方式:

使用闭包和标志位

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

使用高阶函数

const once = (fn) => {
  let executed = false;
  return (...args) => {
    if (!executed) {
      executed = true;
      return fn(...args);
    }
  };
};

使用 Proxy

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

使用 lodash 的 _.once

如果项目中已经使用了 lodash,可以直接使用其提供的 _.once 方法:

js实现once

const _ = require('lodash');
const initialize = _.once(() => {
  console.log('Initialized');
});

注意事项

  • 确保 once 包装的函数在第一次调用时正确执行,后续调用不会产生副作用。
  • 如果需要保留 this 绑定,使用 applycall 方法确保上下文正确。
  • 如果函数需要返回结果,确保只在第一次调用时返回有效值。

这些方法都能有效实现 once 功能,具体选择取决于项目需求和个人偏好。闭包方法是最常见和简单的实现方式。

标签: jsonce
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…