使用场景
数据封装
闭包允许创建私有变量,这些变量在函数外部无法直接访问。通过闭包,可以创建具有私有状态的对象,从而实现数据封装。例如:
function createCounter() {
let count = 0; // count 是私有变量
return function () {
count++;
return count;
};
}
const counter1 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
const counter2 = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
闭包可以用来创建模块化的代码结构,使得模块内的变量和函数不会污染全局命名空间。例如:
const Module = (function () {
let privateVar = "I am private";
function privateMethod() {
console.log(privateVar);
}
return {
publicMethod: function () {
privateMethod();
}
};
})();
Module.publicMethod(); // 输出 "I am private"
闭包的关键在于它能够“记住”外部函数的状态,即使外部函数已经执行完毕。这个特性使得闭包在 JavaScript 中非常有用,尤其是在涉及到数据隐私、状态管理和函数工厂等方面。
延迟执行
闭包可以用来延迟执行某些代码,尤其在处理异步操作时。例如:
function delayedGreeting(name) {
return function () {
console.log(`Hello, ${name}!`);
};
}
const greetJohn = delayedGreeting("John");
setTimeout(greetJohn, 1000); // 1秒后输出 "Hello, John!"
事件处理
闭包常用于事件处理程序,以便访问事件处理程序内的数据。例如:
function setupButton(buttonId) {
const button = document.getElementById(buttonId);
let count = 0;
button.addEventListener("click", function () {
count++;
console.log(`Button clicked ${count} times`);
});
}
setupButton("myButton");
标签:闭包,function,console,log,JavaScript,count,const
From: https://www.cnblogs.com/Himmelbleu/p/18389388