闭包:
定义 当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数的内部变量,且返回的那个函数在外部被执行,就产生了闭包.
闭包是一个环境,具体指的就是外部函数–高阶函数 closure
特性
- 函数套函数
- 内部函数可以直接访问外部函数的内部变量或参数
- 变量或参数不会被垃圾回收机制回收
- 因为函数内部声明 的变量是局部的,只能在函数内部访问到,但是函数外部的变量是对函数内部可见的,这就是作用域链的特点了。
子级可以向父级查找变量,逐级查找,找到为止
优缺点:
- 好处
-
保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
-
在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
-
匿名自执行函数可以减少内存消耗
-
变量长期驻扎在内存中
-
避免全局变量的污染
- 坏处
-
其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;
-
其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响