function createCounter() {
let count = 1;
return function() {
return count++;
};
}
const counter = createCounter();
console.log(counter());
console.log(counter());
闭包和工厂函数模式的工作原理解释
- 工厂函数模式:
createCounter
是一个工厂函数。它的作用是创建并返回一个新的函数。工厂函数的特点就是它可以根据需要创建多个相似但相互独立的对象(这里是函数对象)。在这个例子中,每次调用 createCounter
都会返回一个新的函数,这些函数都有自己独立的状态(即 count
变量)。
- 闭包:返回的内部函数(即
function() { return count++; }
)形成了闭包。闭包是指一个函数能够访问并记住其词法作用域中的变量,即使这个函数是在其原始作用域之外执行。在这里,内部函数记住了 createCounter
作用域中的 count
变量。每次调用内部函数时,它都能访问并修改 count
的值,而 count
变量不会被垃圾回收机制回收,因为内部函数一直持有对它的引用。这样就实现了每次调用返回递增数字的功能。