【JavaScript】闭包

1、闭包的定义

当一个嵌套的内部子函数引用了嵌套的外部变量(函数),就会产生闭包

2、产生闭包的条件

  1. 嵌套函数
  2. 内部函数引用了外部函数的数据(变量或者函数)
  3. 现在:引用了内部函数才会产生闭包。之前:执行内部函数的定义(只要执行了内部函数的定义就会产生,无需调用内部函数执行)

3、闭包的作用

  1. 使用函数内部的变量在函数执行完后,任然存活在内存中(延长了局部变量的生命周期)
  2. 让函数外部可以操作(读写)导函数内部的数据(变量/函数)

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、闭包的缺点

问题:

  1. 函数执行完后,函数内的局部变量没有释放,占用内存的时间变长
  2. 容易造成内存泄漏

解决:

  1. 能不用就不用
  2. 内存释放(赋值为 null)
posted @   RikkaXl  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示