JavaScript中闭包(closures)是如何工作的?请用示例解释
大家好!我刚开始学习JavaScript,怎么也搞不懂闭包(closures)这个主题。读了很多文章,但还是困惑。
下面这个例子让我很困惑。我创建了一个返回另一个函数的函数:
```javascript
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
console.log(counter2()); // 1 — 为什么不是3?
```
为什么`counter1`和`counter2`表现得像独立的计数器?我以为变量`count`会是共享的。而且JavaScript在`createCounter`函数执行完毕后,是如何“记住”`count`的值的?通常局部变量在退出函数后就会被销毁。
请用简单的话解释闭包的工作机制。它们是如何存储对变量的引用的?在真实项目中这又有什么用?