闭包,何为闭包?如何解决闭包? (最全面解释)

何为闭包?

这里收集了不同文献中的原话,具体怎么理解看你自己:

  • 《JavaScript 高级程序设计》

    闭包指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。

  • 《Node 深入浅出》

    在 JavaScript 中,实现外部作用域访问内部作用域中变量的方法叫做闭包(closure)。

  • 《JavaScript 设计模式与开发实践》

    局部变量所在的环境被外界访问,这个局部变量就有了不被销毁的理由。这时就产生了一个闭包结构,在闭包中,局部变量的生命被延续了。

  • 《你不知道的 JavaScript(上卷)》

    内部的函数持有对一个值的引用,引擎会调用这个函数,而词法作用域在这个过程中保持完整,这就是闭包。换句话说:当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域外执行,这时就产生了闭包。

个人简单解析:一个函数的值被其内部函数所引用,且这个内部函数被外部作用域所访问,就是闭包。 (外部作用域怎么访问到这个内部函数呢,内部函数被return了出去。)

如何解决闭包?

1、放访问内部函数的变量置为null

const a = () => {
    const b = 1
    const c = () => {
        console.log(b)
   }
    return c   
}

let d = a() 
---------------------
这里d 长期引用了c,而c一直引用了b,导致变量 b 无法被 gc 回收, 存在内存泄漏

解决办法: d = null     

2、使用立即执行函数(这个能理解,但很鸡肋,有了let 以后,它所解决的问题,用let 也能解决,且不好被理解。) 

什么是闭包?如何解决闭包?_前端菜鸟小郭的博客-CSDN博客_闭包怎么解决

为啥鸡肋,直接参考这篇文章的代码,用立即执行函数解决了for循环的经典问题,但用const也能解决。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值