闭包(Closure)
可以保留局部变量不被释放的代码块,被称为一个闭包
闭包的概念比较抽象,相信大家都或多或少知道、用到这个特性
那么闭包到底能给我们带来什么好处?
先来看一下如何创建一个闭包:
|
makeCounter
这个函数的代码块,在返回的函数中,对局部变量 k
,进行了引用,导致局部变量无法在函数执行结束后,被系统回收掉,从而产生了闭包。而这个闭包的作用就是,“保留住“ 了局部变量,使内层函数调用时,可以重复使用该变量;而不同于全局变量,该变量只能在函数内部被引用。
换句话说,闭包其实就是创造出了一些函数私有的 ”持久化变量“。
所以从这个例子,我们可以总结出,闭包的创造条件是:
- 存在内、外两层函数
- 内层函数对外层函数的局部变量进行了引用
闭包的用途
闭包的主要用途就是可以定义一些作用域局限的持久化变量,这些变量可以用来做缓存或者计算的中间量等等。
|
上面例子是一个简单的缓存工具的实现,匿名函数创造了一个闭包,使得 store
对象 ,一直可以被引用,不会被回收。
闭包的弊端
持久化变量不会被正常释放,持续占用内存空间,很容易造成内存浪费,所以一般需要一些额外手动的清理机制。
摘选自:http://taobaofed.org/blog/2017/03/16/javascript-functional-programing/