js实现once
实现 once 函数的方法
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绑定正确。






