闭包简介

1. 闭包:    
            
            即重用一个变量,又保护变量不被污染的一种机制。

2. 为什么使用闭包 : 
            
            全局变量和局部变量都具有不可兼得的优缺点。
    
       全局变量:  优: 可重用, 缺: 易被污染。

       局部变量:  优: 仅函数内可用,不会被污染。

          缺: 不可重用!
 

3. 何时使用: 只要即重用一个变量,又保护变量不被污染时。

如何使用: 

   1. 用外层函数包裹要保护的变量和内层函数。

   2. 外层函数将内层函数返回到外部。

   3. 调用外层函数,获得内层函数的对象,保存在外部的变量中——形成了闭包。  

 

4. 闭包形成的原因: 
        外层函数调用后,外层函数的函数作用域对象无法释放,被内层函数引用着。 

5. 闭包的缺点:

   比普通函数占用更多的内存。

   解决:闭包不在使用时,要及时释放。

   将引用内层函数对象的变量赋值为null。
 
 
 ========================
 6. 示例代码。
 
'use strict'
function outer(){

        let i = 1;                    // i作用域在outer函数中,按理说函数调用完后,i所占的内存释放掉。

        return function innerFunc(){        // 因为返回值是一个函数,函数中引用了outer作用域的i,所以形成闭包,i一直在内存中。
                console.log(i++);
        }

 }

 let  f = outer();     //形成闭包,闭包中的i变量一直在内存中。f的作用域是全局作用域,但是依然可以访问outer函数的作用域,归功于闭包的使用。

 f(); // 1                        连续调用两次,第二次和第一次调用使用的是同样一个i.
 f(); // 2

 f = null; // 释放闭包所占用的内存

7. 参考

https://www.cnblogs.com/jiajialove/p/9049612.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值