闭包是什么?
一、闭包是什么
定义:闭包就是能够读取其他函数内部变量的函数。(里层函数加上一个变量)
例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。私有化数据就是把一些变量私有化到函数里面然后在私有化上基础上保持数据。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
二、闭包有什么优缺点
优点
1.可以访问到函数内部的局部变量
2.可以避免使用大量全局变量所造成的污染。
3.在闭包中变量的值始终保存在内存中,不会在外层函数中调用后被自动清除。
4.闭包可以实现数据的私有化,外部可调用但不可直接修改。
缺点
正是因为闭包中变量的值不会自动清除始终保存在内存中,所以它的缺点也就来了
1.滥用闭包的话,会增大内存的使用,影响性能。
2.使用不当的话,会导致内存泄漏。(或者是旧版本的IE也会导致内存泄漏)
由于IE在IE9之前对jScript对象和COM对象使用了不同的垃圾回收机制,所以闭包在这些旧版本IE中可能会导致问题。在这些版本的IE中,把HTML元素保存在某个闭包的作用域,就相当于宣布该元素不能被销毁。
三、什么时候需要用到闭包(应用场景)
当我们需要重复使用一个对象,但又想保护这个对象不被其他代码所污染。。
应用场景:节流、防抖、封装代码(模块化)。
四、怎么避免闭包引起的内存泄漏
1.我们可以在退出函数前,将不用的局部变量手动赋空,fn=null。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗