闭包的定义及生成条件,闭包的作用及注意事项

闭包的定义:

闭包就是能够读取其他函数内部变量的函数。在js中,可以将闭包理解成“函数中的函数“。

闭包的生成有三个必要的条件:

  1. 在函数a内部间接或者直接return一个函数b
    注:直接return一个函数:return function(){}
    间接return一个函数:return{bbb:function(){}}
    return一个对象或者数组,这个对象中有函数

  2. 在函数b中使用函数a的私有变量

  3. 用一个变量接收函数b,形成一个不会销毁的执行空间,如果不接収,执行a(),会被回收

闭包的特点:

1、 延长了变量的生命周期。优点:执行空间不销毁,变量也没有销毁,缺点:变量一直在内存中

2、 可以访问函数内部的私有变量。优点:可以利用闭包函数,访问函数内部的私有变量,缺点:变量一直在内存中

3、保护私有变量。优点:保护私有变量不会被外界访问,缺点:如果要访问,就必须要使用闭包函数

闭包的作用(好处):

1、可以读取函数内部的变量

2、让这些变量的值始终保存在内存中。

使用闭包的注意事项

如果不是万不得已,不要用闭包

1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会造成内存泄露。(遇到这种问题的解决方案:在退出函数之前,将不使用的局部变量全部删掉)

2、闭包会在父函数外部,改变父函数内部变量的值。(遇到这种问题的解决方案:可以把父函数当做对象使用,把闭包当做公用方法,把内部变量当做私有属性,此时不要随便改变父函数内部变量的值。)

函数的调用:

函数定义的时候在堆中有个函数存储空间,将函数体以字符串形式存入,按照函数名,或者变量名找到对应的存储空间,每一个函数的调用都会开辟一个函数执行空间,进行形参赋值,预解析,里面的内容复制函数存储空间,代码执行完毕,这个执行空间销毁
当函数内部,return一个复杂数据类型时,并且在外面用一个变量接收,这个执行空间就不会销毁,当这个变量指向别的位置时,销毁

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值