js闭包作用及使用场景

61 阅读1分钟

闭包的两个主要作用是:

  1. 数据封装:闭包可以帮助隐藏函数内部的变量,防止它们被外部代码直接访问,从而实现数据的私有化。比如,在 JavaScript 中并没有类似于其他编程语言的私有变量,但可以通过闭包来实现这一功能。
  2. 保持状态:闭包可以保持函数执行时的环境,使得该函数可以在之后的执行中继续访问当时的环境变量。这意味着闭包可以让函数记住状态,即使这个函数已经执行完毕,也不会丢失这些状态。

闭包的简单示例

javascript复制代码function outerFunction() {
    let count = 0;
​
    function innerFunction() {
        count++;
        console.log(count);
    }
​
    return innerFunction;
}
​
const myClosure = outerFunction();
myClosure(); // 输出: 1
myClosure(); // 输出: 2
myClosure(); // 输出: 3

在这个例子中,outerFunction 返回了一个 innerFunction,这个 innerFunction 是一个闭包,因为它保留了对 outerFunction 中变量 count 的访问权。即使 outerFunction 已经执行完毕并离开了其作用域,innerFunction 仍然能够访问和修改 count 变量的值。

使用场景

  • 计数器:像上面的例子一样,闭包可以用来创建计数器。
  • 模块化:可以使用闭包创建模块,隐藏内部实现,只暴露公共接口。
  • 回调函数:在异步编程中,闭包可以保存回调函数执行时的上下文状态。

公众号二维码.jpg