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 :::