# 闭包的使用场景?
闭包很简单,就是能够访问另一个函数作用域变量的函数,更简单的说,闭包就是函数,只不过是声明在其它函数内部而已。
function getOuter(){
let count = 0
function getCount(num){
count += num
console.log(count) //访问外部的数据
}
return getCount //外部函数返回
}
var myfunc = getOuter()
myfunc(1) // 1
myfunc(2) // 3
闭包的特点:
- 闭包可以访问当前函数以外的变量
- 即使外部函数已经返回,闭包仍能访问外部函数定义的变量与参数
- 闭包可以更新外部变量的值
所以,闭包可以:
- 避免全局变量的污染
- 能够读取函数内部的变量
- 可以在内存中维护一个变量
使用闭包应该注意什么:
- 代码难以维护: 闭包内部是可以访问上级作用域,改变上级作用域的私有变量,我们使用的使用一定要小心,不要随便改变上级作用域私有变量的值
- 使用闭包的注意点: 由于闭包会使得函数中的变量都保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄漏。解决方法是,在退出函数之前,将不使用的局部变量全部删除(引用设置为 null ,这样就解除了对这个变量的引用,其引用计数也会减少,从而确保其内存可以在适当的时机回收)
- 内存泄漏: 程序的运行需要内存。对于持续运行的服务进程,必须及时释放不再用到的内存,否则占用越来越高,轻则影响系统性能,重则导致进程崩溃。不再用到的内存,没有及时释放,就叫做内存泄漏
- this指向: 闭包的this指向的是window
闭包的使用场景详见:https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/453