1.概念
闭包是指可以引用另一个函数内部变量的函数
2.涉及知识点
1.变量
2.作用域(就是一套规则,用来查找变量)
作用域链:作用域的嵌套关系组成一条作用域链,当使用的变量在当前作用域未定义时,会从外部作用域中查找.外部作用域无法使用内部作用域的变量.
3.执行上下文
执行环境( execution context )也叫上下文、执行上下文环境。每个执行环境都有一个与之关联的变量对象(variable object ),环境中定义的所有变量和函数都保存在这个对象中。
4.垃圾回收机制
垃圾回收GC(Garbage Collection),是清理程序不用的内存或者是之前用过了,以后不会再用的内存空间
栈的垃圾回收策略:
- 垃圾回收主要也是针对堆内存中的对象,对于栈中的非闭包变量,会被栈执行上下文切换时直接出栈,释放了内存空间
3.应用场景
防抖,节流,vue源码中比如响应式的实现中,封装私有变量
4.优缺点
1.优点:
1.可以将一个变量长期储存在内存中,用于缓存
2.可以避免全局变量的污染
3.加强封装性,是实现了对变量的隐藏和封装
2.缺点:
1.因为函数执行上下文AO执行完不被释放,所以会导致内存消耗很大,增加了内存消耗量,影响网页性能出现问题
2.而且过度的使用闭包可能会导致内存泄漏,或程序加载运行过慢卡顿等问题的出现
3.所以我们可以在退出函数之前 将不使用的局部变量进行删除