什么是闭包

本文解释了闭包的基本概念,如何在函数外部访问内部变量,以及其在性能优化中的作用,如节流和防抖。同时讨论了闭包可能导致的内存泄露问题及解决方法,包括垃圾回收机制的工作原理和优化策略。
摘要由CSDN通过智能技术生成

答:闭包说的通俗一点就是可以在函数外部访问到函数内部的变量。因为正常情况下函数外部是访问不到函数内部作用域变量的,作用域分为了全局.函数级.块级作用域.

表象判断是不是闭包:函数嵌套函数,内部函数被return  内部函数调用外层函数的局部变量

优点:可以隔离作用域,不造成全局污染

   缺点:由于闭包长期驻留内存,则长期这样会导致内存泄露

    如何解决内存泄露:将暴露外部的闭包变量置为null

适用场景:我在性能优化的过程中,使用节流防抖函数就是闭包的原理,导航栏获取下标的使用项目后期的时候进行了一定的性能优化.比方说:对级联菜单的功能,使用了节流防抖的方式,减少了http请求,

或者一个注册模块的时候,要实时(oninput)去后台验证用户名是否已注册给出相应的提示.

闭包的应用的时候,处理能够进行导航栏菜单获取当前下标.

巧妙的转嫁到节流防抖函数上.如果忘了节流防抖函数可以

提一下lodash函数库.(自愿)

Tips:说道闭包可能就会问道垃圾回收机制

通俗的说法就是js是一个弱类型语言.不用的就会被js引擎的垃圾回收机制(GC)自动回收掉,据我了解是用了一种标记回收的方式吧,就是从根节点上把能访问到的都做上标记.定期检测.没有标记的就被清除掉.释放掉内存.因为闭包的一直被引用着就一直有标记就回收不了了.可以置为null就可以,当然垃圾回收机制的打标记.js引擎也做了一定的优化.来提升性能.大体上我就了解这些[再有兴趣的可以参考https://segmentfault.com/a/1190000018605776]

垃圾回收机制有没有了解

js引擎在进行垃圾标识的时候,为了提高性能,有一些处理方式,

我记得好像能分代清除(哪些不常活跃,就不检查)

另一个叫空闲时间回收 增量回收,我的理解就是分开,类似异步的检测来理解,是否放开

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值