闭包的两大作用:保存/保护

  •  闭包的概念

        函数执行时形成的私有上下文EC(FN),正常情况下,代码执行完会出栈后释放;但是特殊情况下,如果当前私有上下文中的某个东西被上下文以外的事物占用了,则上下文不会出栈释  放, 从而形成不销毁的上下文。 函数执行函数执行过程中,会形成一个全新的私有上下文, 可能会被释放,可能不会被释放,不论释放与否,他的作用是:

      (1)保护:划分一个独立的代码执行区域,在这个区域中有自己私有变量存储的空间,保护             自己的私有变量不受外界干扰(操作自己的私有变量和外界没有关系);

      (2)保存:如果当前上下文不被释放【只要上下文中的某个东西被外部占用即可】,则存储            的这些私有变量也不会被释放,可以供其下级上下文中调取使用,相当于把一些值保存起 来          了;

       我们把函数执行形成私有上下文,来保护和保存私有变量机制称为闭包

  • 稍全面的回答

       在js中变量的作用域属于函数作用域, 在函数执行完后,作用域就会被清理,内存也会随之被回 收,但是由于闭包函数是建立在函数内部的子函数, 由于其可访问上级作用域,即使上级函数执行完, 作用域也不会随之销毁, 这时的子函数(也就是闭包),便拥有了访问上级作用域中变量的权限,即使上级函数执行完后作用域内的值也不会被销毁。

  • 闭包的特性

      1、内部函数可以访问定义他们外部函数的参数和变量。(作用域链的向上查找,把外围的作用  域中的变量值存储在内存中而不是在函数调用完毕后销毁)设计私有的方法和变量,避免全局变量的污染。

           (1).闭包是密闭的容器,,类似于set、map容器,存储数据的

           (2).闭包是一个对象,存放数据的格式为 key-value 形式

      2、函数嵌套函数

      3、本质是将函数内部和外部连接起来。优点是可以读取函数内部的变量,让这些变量的值始终保存在内存中,不会在函数被调用之后自动清除

  • 闭包的用途:                                                                                             

  1. 模仿块级作用域
  2. 保护外部函数的变量 能够访问函数定义时所在的词法作用域(阻止其被回收)
  3. 封装私有化变量
  4. 创建模块
  • 闭包应用场景 

       闭包的两个场景,闭包的两大作用:保存/保护。 在开发中, 其实我们随处可见闭包的身影, 大  部分前端JavaScript 代码都是“事件驱动”的,即一个事件绑定的回调方法; 发送ajax请求成功或失败的回调;setTimeout的延时回调;或者一个函数内部返回另一个匿名函数,这些都是闭包的应用.

  • 闭包的优点:延长局部变量的生命周期

  • 闭包缺点:会导致函数的变量一直保存在内存中,过多的闭包可能会导致内存泄漏

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值