背景:应用页面有些函数方法只需要调用一次
方案:闭包变量控制函数执行
应用:初始化操作、异步请求、异步请求、单例模式等
var once = function(fn) {
let used = false
return function (...args) {
if (!used) {
used = true
return fn(...args)
}
}
};
//或者
var once = function(fn) {
return function(...args){
try{
return fn(...args)
}
finally{
fn=()=>{}
}
}
};
function greet(name) {
console.log(`Hello, ${name}!`);
}
const greetOnce = once(greet);
greetOnce('Alice'); // Hello, Alice!
greetOnce('Bob'); // undefined
应用
- 初始化操作:某些初始化操作只需要在应用程序启动时执行一次,例如设置全局配置、注册事件监听器或加载资源等。使用函数只能执行一次的封装,可以确保这些初始化操作只会在应用程序启动时执行一次。
- 事件绑定:在 JavaScript 中,我们经常需要将事件处理程序绑定到 DOM 元素的事件上。如果希望确保事件处理程序只被绑定一次,以避免重复触发问题,可以使用函数只能执行一次的封装来实现。
- 异步请求:在进行异步请求时,有时只需要在第一次请求时执行一些特定逻辑,例如发送统计信息、记录请求日志等。通过使用函数只能执行一次的封装,可以确保这些逻辑只会在第一次请求时执行一次。
- 单例模式:在某些情况下,我们需要确保某个类或对象只能被实例化一次,以保持全局唯一性。函数只能执行一次的封装可以用于实现单例模式,确保只有在第一次调用时才会创建该类或对象的实例。