闭包的初步理解

写在前面

最近在学习JS的高级部分,涉及到了闭包,个人理解不是很到位随便写点记录为主,有不对的地方欢迎指出

闭包是什么

闭包 = closure
英文大致词意为:闭合、封闭;
闭包主要是为了实现出让函数外界访问函数、方法内部的变量;声明出的变量保存在子函数或其他函数的scopes(作用域)里绑定,会防止变量被JS的GC自动回收。

简单来说就是可以实现在一个作用域内访问另一个作用域的私有变量;
或者为函数在执行过程中,返回了另一个函数,亦或变量、引用…

闭包的条件

1、若要想在另一个作用域中访问别的作用域变量等,函数在调用时返回了另一个函数的引用;
2、返回的函数中包含了父级的引用;
3、函数外有变量或其他数据类型引用了返回值

闭包基本实现

举个栗子

@Autor: 梁大炮
 function y() {
            var a = 10;
            return function () {
                a++;
                console.log(a)
            }
        }
        var b = y();
        b()

闭包的return

严格意义来讲,闭包的return基于使用场景来进行判断,并非一定要有return
当我们外界需要闭包的引用我们才需要进行return,外界不需要则不写return,只要调用了闭包我们函数内部的值的生命周期就可以在内存中一直存在,所以不一定需要return,但使用闭包的大部分场景都需要进行return函数中的值亦或为引用;

闭包的内存泄漏

还这段代码

@Autor: 梁大炮
 function y() {
            var a = 10;
            return function () {
                a++;
                console.log(a)
            }
        }
        var b = y();
        b()

可以看到我们使用了var b来进行接收函数y() ,因为b是一个全局变量,除非我们关闭页面,GC才进行回收,除非是不会从内存中进行销毁的;
然后我们看b的调用结果为11;
在这里插入图片描述
也就是说,b引用了y(),y返回了匿名函数,匿名函数中有变量a,所以这个时候就造成了内存泄漏
函数内部包裹函数,作用域链得不到释放,造成消耗内存

闭包的优缺点

优点:
1、可以保护私有变量不被外界进行污染,也包括可以重复命名等 2、可以进行更连贯的逻辑书写; 3、内部的匿名函数减少内存的使用,提高性能
缺点:
1、使用完变量后不可以让CG主动去进行垃圾回收,但是也有解决方法:手动给值为null 2、很容易回内存泄漏

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值