关于有效闭包和无效闭包以及副作用

1、何为有效闭包?

有效闭包

如果将内部函数return出去,那么该闭包就会被长久保留,就是有效闭包

 

2、何为无效闭包?

无效闭包

即使没有讲内部函数return出去,只要满足以上的所有产生条件,

那么就会产生闭包,只是这个闭包只会存活极短的时间,就是无效闭包

function wrap(){
            var a = 1;
            function moon(){
                console.log('a',a)
            }

            // console.log('moon',moon)
            return moon;
        }

        var result = wrap();

3.闭包的优点(用处)

        1.延长变量的生命周期

本来外层函数执行结束的时候,外层函数的执行上下文应该要被销毁

连带着里面的所有变量都要销毁,但是最终变量被闭包成功保留,没有被销毁

        2.可以实现js模块化

使用闭包将某些数据缓存起来,变为私有数据,其他人无法修改

例如:JQuery

4.闭包的缺点(副作用)

1.将本该销毁的变量保存下来,需要花费更多的内存

内存泄漏 花费了更多内存空间来实现功能 (口袋有10块钱,本来买东西要花1块,结果花了2块)

内存溢出 由于内存泄漏过多,最终超出了当前电脑内存所能存储的极限(存满了)

结果就是程序宕机,无法正常使用当前项目 (本来有10块钱,买一样东西结果要11块)

5.如何解决闭包的副作用

1.尽量减少使用闭包

2.将无用的闭包及时释放

问题:为什么闭包不会被销毁

原因:因为内部函数使用Scopes属性引用着闭包,而内部函数又被外部的变量引用着,而垃圾回收机制只会回收没人引用的东西

解决:外部对内部函数的引用释放掉即可 result=null

如果同时有多个内部函数共享一个闭包对象,那么必须将使用到的内部函数全部释放销毁

否则闭包将永久存活

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值