JavaScript閉包(Closures)是一種強大的編程概念,它允許函數(shù)訪問其定義時所在作用域中的變量,即使該函數(shù)在其他地方被調(diào)用。閉包有助于保持變量的私有性,防止全局污染,并且可以實現(xiàn)一些特殊功能,如模擬塊級作用域、創(chuàng)建函數(shù)工廠等。以下是一些使用閉包進行開發(fā)的便利之處:
function createCounter() {
let count = 0; // 私有變量
return {
increment: function() {
count++;
},
getCount: function() {
return count;
}
};
}
const counter = createCounter();
counter.increment();
console.log(counter.getCount()); // 輸出 1
(function() {
var blockScopedVariable = 'I am block scoped';
// 塊級作用域內(nèi)還可以添加更多的邏輯
})();
console.log(blockScopedVariable); // 引用錯誤:blockScopedVariable is not defined
function createMultiplier(multiplier) {
return function(input) {
return input * multiplier;
};
}
const double = createMultiplier(2);
const triple = createMultiplier(3);
console.log(double(5)); // 輸出 10
console.log(triple(5)); // 輸出 15
function createLogger(prefix) {
let count = 0;
return function(message) {
count++;
console.log(`[${prefix} #${count}] ${message}`);
};
}
const infoLogger = createLogger('Info');
infoLogger('Hello, World!'); // 輸出: [Info #1] Hello, World!
infoLogger('Another message'); // 輸出: [Info #2] Another message
const myModule = (function() {
const privateData = 'Secret data';
function privateFunction() {
console.log(privateData);
}
return {
publicFunction: function() {
privateFunction();
}
};
})();
myModule.publicFunction(); // 輸出: Secret data
通過這些方式,閉包可以極大地提高JavaScript代碼的可維護性、可擴展性和封裝性。