JavaScript 闭包

闭包是JavaScript中一种重要的特性,当内部函数引用外部函数的变量时形成闭包。它会导致外部函数作用域不释放,可能造成内存泄露。闭包的好处包括实现公有变量、缓存、封装和模块化。例如,它可以用来创建累加器函数,避免全局变量污染,同时提供数据保护。立即执行函数在解决循环中变量共享问题时与闭包结合使用,确保每次循环的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.闭包:

当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露

注意:这里的内存泄露就是外层函数作用域不释放占用内存,所以剩的内存少  (闭包的缺点)

简单来说:两个函数互相嵌套或者多个函数互相嵌套,先说两个函数互相嵌套把内部函数保存到了外层函数的外部这种情况必然生产闭包,然后内部函数在外部执行的时候一定能够调用的了,原来它在的函数环境的变量。

案例:

此案例的结构是a函数内包括了b函数

a函数执行完的前一刻,a函数把b函数return保存在了外部,之后我们执行b函数,此时b的AO作用域是函数一起保存出来的,a的AO作用域并没有得到释放,被b函数保存,所以我们执行b的时候得到的aaa是a函数中的'123'

 2. 闭包的作用 (好处)

     1.实现公有变量

           eg:函数累加器

普通函数写法:

使用闭包完成  优点(不用全局变量) 

 

       

     2.可以做缓存(存储结构)

           eg:eater

   注意:多个函数与一个函数i形成闭包时,他们之间的变量可以共用,因为保存的是同一个域

 

     3.可以实现封装,属性私有化

           eg:Person()

           

     4.模块化开发,防止污染全局变量

3.闭包与立即执行函数的结合运用

先简单介绍一下立即执行函数

案例需求:使用原生js变量解决下面代码 为什么返回十个是10?

难点 :使用闭包解决闭包

十个10 的原因:因为我们在返回的前一刻for就已经是10了,则每次调用的内部的时候就都是10

解决方案:

 解决方案:使用立即执行函数接收每一次for循环给出的i调用 返回的函数则是原来的立即执行函数的AO作用域。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值