**JavaScript中的闭包(Closure)**是指在函数内部创建一个新的作用域,使得这个作用域中的变量在函数执行完后仍然能够被访问。闭包是JavaScript中非常重要的概念,可以用于封装变量、实现模块化等多种场景。
**下面是一个例子,展示如何使用闭包来封装变量:**
```javascript
function createCounter() {
let count = 0;
return function() {
count++;
console.log(count);
}
}
const counter = createCounter();
counter(); // 输出 1
counter(); // 输出 2
counter(); // 输出 3
```
在上面的例子中,`createCounter`函数返回了一个新的函数,这个新的函数中访问了`createCounter`函数中定义的`count`变量。由于新函数是在`createCounter`函数内部创建的,并且访问了`createCounter`函数中的变量,因此它形成了一个闭包。在调用新函数时,每次都会输出一个递增的计数器值。
**闭包还可以用于实现模块化,例如:**
```javascript
const myModule = (function() {
let count = 0;
function increment() {
count++;
console.log(count);
}
function reset() {
count = 0;
console.log(count);
}
return {
increment,
reset
}
})();
myModule.increment(); // 输出 1
myModule.increment(); // 输出 2
myModule.reset(); // 输出 0
```
在上面的例子中,使用了立即执行函数表达式(IIFE)来创建一个新的作用域,将`increment`和`reset`函数作为返回值暴露给外部。由于外部无法访问`count`变量,因此可以实现变量的封装。