确保传入的方法只能被执行一次
once
函数签名
typescript
function once<F extends AnyFunction>(fn: F)描述
确保传入的方法只能被执行一次
类型参数
| 参数名 | 约束 | 默认值 | 描述 |
|---|---|---|---|
F | AnyFunction | - | - |
参数
| 参数名 | 类型 | 可选 | 默认值 | 描述 |
|---|---|---|---|---|
fn | F | 否 | - | - |
返回值
返回一个新的方法,该方法只会执行一次
在线示例
点击查看源码
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 :::