理解:函数内部返回一个函数,这个内部函数引用外部函数的变量,被引用的外部函数的变量不会被立即销毁。
用途:
1.封装变量: 闭包能够创建私有变量,防止全局污染。通过闭包,你可以使用 getter 和 setter 函数控制对变量的访问,实现更安全的代码。
2.保存状态: 闭包让函数在执行时可以保存状态,这意味着函数在后续调用中能够记住之前的状态。在循环中使用闭包,可以保存每次迭代的状态,非常有用。
3.实现模块模式: 通过闭包,你可以创建类似于模块的结构,将一组相关的功能封装在一个闭包内部。这样做有助于组织和管理代码,避免全局命名空间的混乱。
4.异步编程: 在异步操作中,闭包可以捕获外部变量,确保在异步操作完成后仍然可以访问这些变量。这在事件处理、回调函数和 Promise 中经常被使用。
缺点:
闭包可能会导致内存泄漏。
因为闭包中引用外部变量不会被垃圾回收机制回收,直到闭包不再被引用。因此,使用闭包时,需要注意避免过度引用外部变量,特别是循环引用的情况。
我们可以主动将已使用的闭包函数赋值为null可以销毁闭包,确保应用的性能和内存管理得以优化。