Skip to content

@utilslib/core/once


确保传入的方法只能被执行一次


once

函数签名

typescript
function once<F extends AnyFunction>(fn: F)

描述

确保传入的方法只能被执行一次

类型参数

参数名约束默认值描述
FAnyFunction--

参数

参数名类型可选默认值描述
fnF--

返回值

返回一个新的方法,该方法只会执行一次

在线示例

点击查看源码
js
/**
 * 确保传入的方法只能被执行一次
 *
 * @param {(...args: any) => any} func - 要执行的方法。
 * @returns {(...args: any) => any} 返回一个新的方法,该方法只会执行一次
 */
export function once(fn) {
  // 利用闭包判断函数是否执行过
  let called = false;
  return function (...args) {
    if (!called) {
      called = true;
      return fn.apply(this, args);
    }
  };
}
ts
export type AnyFunction = (...args: any) => any;

/**
 * 确保传入的方法只能被执行一次
 *
 * @param {(...args: any) => any} func - 要执行的方法。
 * @returns {(...args: any) => any} 返回一个新的方法,该方法只会执行一次
 */
export function once<F extends AnyFunction>(fn: F) {
  // 利用闭包判断函数是否执行过
  let called = false;
  return function (this: unknown, ...args: Parameters<F>) {
    if (!called) {
      called = true;
      return fn.apply(this, args);
    }
  };
}

如有错误,请提交issue :::