闭包的使用方式及其优缺点

闭包

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
一.闭包的定义和调用阶段
定义:开辟一个函数空间,把代码存放在函数的存储空间内,把空间地址复制给函数名
调用:1.按照函数名存储的地址找到存储空间;
2.再次开辟一个函数执行空间;
3.在执行空间内部进行参数赋值;
4.在执行空间进行预解析;
5.把存储空间的代码复制一份到执行空间执行;
6.代码执行完毕以后,执行空间销毁
二.一个不会销毁的函数空间(闭包空间)
当函数里面返回一个复杂函数数据类型,并且在函数外部有变量引入这个被返回的复杂数据类型的时候,这个函数执行空间不会被销毁就这样形成了闭包空间。
三.闭包的条件
1.函数A内部直接或间接返回一个函数B;
2.函数B内部使用着函数A的私有数据;
3.函数A外部有变量引用着函数B
举个小例子:

四.闭包的优缺点
1.延长变量的声明周期
=>优点:变量会一直存在
=>缺点:一个不会销毁的函数执行空间
2.可以在函数外部使用着函数A的私有变量
=>优点:函数外部访问内部数据
=>缺点:有一个不会销毁的函数执行空间
3.保护私有变量
=>优点:内部变量不能在外部访问
=>缺点:闭包空间内存溢出
总结: 闭包说白了就是一个环境,能够读取其他函数内部的变量。
本质上,闭包是将函数内部和函数外部连接起来的桥梁。虽然缺点也有,但是利大于弊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包是指一个函数访问其词法作用域外部的变量,并且即使这个函数在其定义所在的作用域外被执行,它仍然能够访问和操作这些变量。 js闭包的优点有: 1. 保护变量:闭包可以创建一个私有的作用域,通过将变量隐藏在函数作用域内部,防止变量被外部访问和修改,提高代码的安全性。 2. 延长变量生命周期:闭包可以延长变量的生命周期,即使函数执行完毕之后,闭包内的变量依然会存在,这样可以保留一些需要在后续操作中使用的变量值。 3. 实现模块化:通过闭包可以实现模块化的代码组织方式,将相关的变量和函数封装在一个闭包内部,减少变量的全局污染,提高代码的可维护性和可重用性。 js闭包的缺点有: 1. 内存占用:使用闭包时会导致变量一直存在于内存中,如果闭包持有大量变量或者引用外部大对象,会占用较多的内存空间,增加内存压力。 2. 性能问题:闭包会使函数的作用域链变长,影响函数的性能,访问外部变量时需要经过更多的作用域链查找。在大量使用闭包的情况下,会降低程序的执行效率。 3. 内存泄漏:如果闭包存在循环引用,即闭包内的变量引用了外部作用域的变量,并且外部作用域的变量又引用了闭包内的变量,这样会导致内存无法释放,造成内存泄漏问题。 使用场景: 1. 保护私有变量:当需要保护一些私有的变量不被外部访问和修改时,可以使用闭包将这些变量封装起来。 2. 实现模块化:使用闭包可以封装一些相关的变量和函数,实现模块化的代码组织方式,提高代码的可维护性和可重用性。 3. 延长变量生命周期:当需要在函数执行完毕后依然保存某些变量的值时,可以使用闭包将这些变量封装起来,延长它们的生命周期。 4. 回调函数:在事件处理、异步编程等场景中,经常需要使用闭包作为回调函数,可以访问到外部的变量和状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值