


























一、概念
当通过调用外部函数返回的内部函数后,即使外部函数已经执行结束,但是被内部函数引用的外部函数变量依然会保存在内存中。我们把引用了其他函数作用域变量的函数和这些被引用变量的集合,称为闭包(Closure)。
二、闭包实现
闭包指的是一个函数可以访问它定义时所在的词法作用域以及全局作用域中的变量。以js为例:

具体的说就是:当内部函数引用外部函数变量时,外部函数的作用域将被保留在内存中,以便内部函数可以访问这些变量。
三、用途
3.1、封装私有变量
闭包可以用于封装私有变量,防止其被外部访问和修改。

3.2、缓存
函数一旦执行完毕,其内存就会被销毁,而因为闭包,其内部作用域的内存得以保存。

3.3、模块化编程(实现共有变量)
闭包还可以用于实现模块化编程。模块化编程是一种将程序拆分为小的,独立的,可重用的模块编程风格。闭包可以用于封装模块的私有变量和方法,以防止其被外部访问和修改。

四、缺点
闭包会引用外部函数变量,这些变量在外部函数执行完毕后没有被释放,会一直存在于内存中,总内存不变的情况下,可用内存变小。一旦形成闭包,只有在页面关闭后,闭包占用内存才会被回收,会导致内存泄漏。
五、处理
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。