【JavaScript】闭包
1、闭包的定义
当一个嵌套的内部子函数引用了嵌套的外部变量(函数),就会产生闭包
2、产生闭包的条件
- 嵌套函数
- 内部函数引用了外部函数的数据(变量或者函数)
- 现在:引用了内部函数才会产生闭包。之前:执行内部函数的定义(只要执行了内部函数的定义就会产生,无需调用内部函数执行)
3、闭包的作用
- 使用函数内部的变量在函数执行完后,任然存活在内存中(延长了局部变量的生命周期)
- 让函数外部可以操作(读写)导函数内部的数据(变量/函数)
4、闭包向外暴露
1、通过 return 返回一个对象
function a(){
//定义一个变量
var b = "BB"
//定义两个函数,产生闭包
function sayA(){
console.log(b+"sayA")
}
function sayB(){
console.log(b+"sayB")
}
//向外暴露两个函数
return {
sayA:sayA,
sayB:sayB
}
}
使用时
<script> type='text/JavaScript' src='a.js'</script>
<script>
var c = a()//返回对象 {sayA:sayA,sayB:sayB}
c.sayA()//调用 sayA 和 sayB 函数
c.sayB()
</script>
2、通过 window 添加对象
(function a(){
//定义一个变量
var b = "BB"
//定义两个函数,产生闭包
function sayA(){
console.log(b+"sayA")
}
function sayB(){
console.log(b+"sayB")
}
//向外暴露两个函数
window.a = {
sayA:sayA,
sayB:sayB
}
})()
使用时
<script> type='text/JavaScript' src='a.js'</script>
<script>
//由于在函数定义时接着自调用了,所以引入的时候函数 a 已经调用过了
a.sayA()//调用 sayA 和 sayB 函数
a.sayB()//
</script>
5、闭包的缺点
问题:
- 函数执行完后,函数内的局部变量没有释放,占用内存的时间变长
- 容易造成内存泄漏
解决:
- 能不用就不用
- 内存释放(赋值为 null)
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了