1. 闭包的理解

      1. 函数执形成一个私有的作用域,保护里面的私有变量不受外界的干扰,这种保护机制称之为“闭包”

      2. 市面上的开发者认为的闭包是:形成一个不销毁的私有作用域(私有栈内存)才是闭包

      3. 代码示例 ```javascript //=>闭包:柯理化函数 function fn() { return function () {

    } } var f = fn(); */

    /* //=>闭包:惰性函数 var utils = (function () { return {

    1. }

    })();

    
    
    2. 
    闭包项目实战应用
    
       1. 
    真实项目中为了保证JS的性能(堆栈内存的性能优化),应该尽可能的减少闭包的使用(不销毁的堆栈内存是耗性能的)
    
       2. 
    闭包具有“保护”作用:保护私有变量不受外界的干扰
    
          1. 
    在真实项目中,尤其是团队协作开发的时候,应当尽可能的减少全局变量的使用,以防止相互之前的冲突(“全局变量污染”),那么此时我们完全可以把自己这一部分内容封装到一个闭包中,让全局变量转换为私有变量
    
          2. 
    代码示例
    ```javascript
     /*
             (function () {
                 var n = 12;
                 function fn() {
    
        }
    
        //...
    
    })();
    */
    
         3. 
    

    不仅如此,我们封装类库插件的时候,也会把自己的程序都存放到闭包中保护起来,防止和用户的程序冲突,但是我们又需要暴露一些方法给客户使用,这样我们如何处理呢?

         4. 
    

    JQ这种方式:把需要暴露的方法抛到全局

     /*
     (function () {
           function jQuery() {
     //...
      }
    //...
        window.jQuery = window.$ = jQuery;//=>把需要供外面使用的方法,通过给WIN设置属性的方式暴露出去
    })();
    // jQuery();
    // $();
    */
    
         2. Zepto这种方式:基于RETURN把需要共外面使用的方法暴露出去
    
                               2. /*
                                  var Zepto=(function () {
                                      //...
                                      return {
                                          xxx:function () {
    
            }
        };
    
    })();
    Zepto.xxx();
    */
    
    1. .闭包具有“保存”作用:形成不销毁的栈内存,把一些值保存下来,方便后面的调取使用