闭包的形成,弊端

闭包的形成与变量的作用域以及变量的生存周期有密切的关系
关于变量及变量声明周期 链接

闭包的形成

Javascript允许使用内部函数,可以将函数定义和函数表达式放在另一个函数的函数体 内。而且,内部函数可以访问它所在的外部函数声明的局部变量、参数以及声明的其 他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会 形成闭包。常见的闭包写法就是简单的函数套函数,通过另一个函数访问这个函数的 局部变量,利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部,延续变 量的生命。使用闭包可以减少全局环境的污染,也可用延续变量的生命。

闭包的适用场景

  1. 减少全局环境的污染生成独立的运行环境
    模块化就是利用这个特点对不同的模块都有自己独立的运行环境,不会和全局冲突, 模块和模块之间通过抛出的接口进行依赖使用 以及像我们常用的jquery类库(避免和全局冲突使用闭包实现自己独立的环境)
  2. 可以通过返回其他函数的方式突破作用域链
    可以利用这个功能做一些值的缓存工作,例如常见的设计模式(单例模式),以及现 在比较火的框架vue中的计算属性
其实当遇到以下场景的时候都可以使用闭包
  1. 维护函数内的变量安全,避免全局变量的污染。
  2. 维持一个变量不被回收。
  3. 封装模块

闭包的缺点

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大。所以在闭包不用之 后,将不使用的局部变量删除,使其被回收。在IE中可能导致内存泄露,即无法回收 驻留在内存中的元素,这时候需要手动释放。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容