JavaScript闭包(Closure)是指一个函数可以访问其外部作用域中的变量和参数。闭包的应用场景非常广泛,以下是一些常见的例子:
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";
// 块级作用域内还可以添加其他逻辑
})();
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
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function (...remainingArgs) {
return curried.apply(this, args.concat(remainingArgs));
};
}
};
}
function add(a, b, c) {
return a + b + c;
}
const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 输出 6
这些仅仅是闭包在JavaScript中的一些应用场景,实际上闭包还有很多其他用途,可以帮助我们更好地管理和控制代码。