快速了解js中的闭包

了解闭包

闭包的生成有三个必要条件(缺一不可)
1. 在函数 A 内部直接或者间接返回一个函数 B;
2. B 函数内部使用着 A 函数的私有变量(私有数据);
3. A 函数外部有一个变量接受着函数 B。
形成了一个不会销毁的函数空间

闭包空间

我们管这个不会销毁的 a 函数的执行空间叫做 闭包空间
把函数 a 里面返回的 函数 b, 叫做函数a 的 闭包函数
官方给的定义有一句话: 闭包 => 函数内部的函数
在这里插入图片描述

闭包的特点(优缺点)

好处

①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突

②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)

③匿名自执行函数可以减少内存消耗

坏处

①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;

②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响

闭包的作用

就是当你需要延长变量的声明周期的时候,或者你需要访问某一个函数内部的私有数据的时候, 你可以使用 闭包 函数来解决。
前提:
1. 如果有别的方法, 尽量不要使用闭包函数
2. 只有到没有招的时候, 我们在使用闭包函数
闭包: 慎用

返回函数的方法

  1. 直接返回的一个函数, return function b() {}
  2. 间接返回一个函数, return 一个对象或者数组, 这个对象或者数组里面有一个函数
    在这里插入图片描述
    使用:
    当你只需要访问一个数据的时候, 可以使用直接返回或者间接返回;
    当你需要访问多个私有数据的时候,我们就需要使用间接返回的方式
    => 返回一个对象内包含多个闭包函数

经典例题

在这里插入图片描述一般情况下,在函数fn执行完后,就应该连同它里面的变量一同被销毁,但是在这个例子中,匿名函数作为fn的返回值被赋值给了f,这时候相当于f=ƒ (n){console.log(n + (–i)) } ,并且匿名函数内部引用着fn里的变量i,所以变量i无法被销毁,而变量n是每次被调用时新创建的,所以每次f执行完后它就把属于自己的变量连同自己一起销毁,于是乎最后就剩下孤零零的i,于是这里就产生了内存消耗的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值