事件处理程序
闭包可以用于处理事件回调函数,保持对外部变量的访问,并且可以在事件触发时访问这些变量。
代码语言:javascript复制function createButton() {
var counter = 0;
var button = document.createElement('button');
button.textContent = 'Click me';
button.addEventListener('click', function() {
counter ;
console.log('Button clicked ' counter ' times.');
});
return button;
}
var myButton = createButton();
document.body.appendChild(myButton);
在这个示例中,createButton
函数创建一个按钮元素,并绑定了一个点击事件回调函数。回调函数使用闭包访问和更新外部变量counter
,并在每次点击时打印计数器的值。
模块化开发
闭包可以用于实现模块化开发,通过创建私有变量和暴露公共接口来组织和封装代码。
代码语言:javascript复制var myModule = (function() {
var privateVariable = 'I am private';
function privateFunction() {
console.log('This is a private function.');
}
return {
publicMethod: function() {
console.log('This is a public method.');
privateFunction();
},
getPrivateVariable: function() {
return privateVariable;
}
};
})();
myModule.publicMethod(); // 输出: This is a public method. This is a private function.
console.log(myModule.getPrivateVariable()); // 输出: I am private
在这个示例中,我们使用立即执行函数创建了一个模块。模块内部定义了私有变量privateVariable
和私有函数privateFunction
,并返回一个包含公共方法和获取私有变量的方法的对象。这样,只有通过模块暴露的公共接口才能访问私有变量和函数。