闭包

一,什么是闭包(closure)?为什么要用他

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常用方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部。
使用闭包主要是为了设计私有的方法和变量,闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存的使用量,使用不当会造成内存泄漏,在JS中,函数即闭包,只有函数才会产生作用域的概念。
因为JS规定内部函数可以访问外部函数,但外部函数无法获取到内部函数的变量作用,所以闭包让外部函数可以访问到内部函数的变量,使一些变量始终保存在内存中。
闭包的特性
1.函数内再嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收
闭包的好处
1.不会污染全局变量
2.可以进行形参的记忆,减少形参的个数,延长形参生命周期
3.方便进行模块化开发
闭包的缺点
1.不会被垃圾回收机制回收
2.内存泄漏
闭包常见用途
1.创建特权方法用于访问控制
2.事件处理程序及回调
3.封装
4.实现类和继承
5.匿名自执行函数
我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多的坏处,比如,别的函数可能误用这些变量,造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的)。除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,比如UI的初始化,那么我们可以使用闭包,创建了一个匿名函数,并立即执行它,由于外部无法引用它内部的变量,因此在函数执行完后会立即释放资源,关键是不会污染全局对象。
6.结果缓存
我们开发中会碰到很多情况,设想我们有一个处理过程很耗时的函数对象,每次调用都会话费很长时间,那么我们就需要将计算出来的值存储起来,当调用这个函数的时候,首先在缓存中查找,如果查找不到,则进行计算,然后更新缓存并返回值,如果找到了,直接返回查找到的值即可,闭包正是可以做到这一点,因为它不会释放外部的引用,从而函数内部的值可以得以保留。

二,垃圾回收机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值