闭包

闭包

什么是闭包???

  • 官方解释:闭包是指有权访问另一个函数作用域中的变量的函数
  • 个人理解:
    1.函数A返回函数B,函数B中操作函数A中的变量,执行函数A将返回的函数B赋值给全局变量。
    2.因为函数B使用了函数A中的变量,函数A执行完后,不会销毁,实现B函数的多次使用
    3.函数A的变量外部不能调用,所以实现了变量的私有

闭包的特点

  • 函数嵌套函数
  • 函数内部可以引用外部的参数和变量
  • 函数外不能访问函数内的参数和变量
  • 参数和变量不会被垃圾回收机制回收

闭包的目的

  • 希望一个变量长期驻扎在内存中
  • 避免全局变量的污染
  • 私有成员的存在

缺点

  • 由于函数不自动销毁,会造成内存泄漏
function fn1(){
    var a=1;
    // 因为返回的函数被存储在全局变量中,
    // 并且这个返回的函数使用这个a的局部变量,因此a被保存在堆中
    return function(){
        a++;
        console.log(a);
    }
}

var f=fn1();
f()    // 2
f();   // 3

闭包封装工具包

var Utils=(function(){
    var num=0;
       return {
           a:function(){
               num++;
               console.log(num);
           },
           b:function(){

           }
       }
   })();
   

   Utils.a();
   Utils.a();
   Utils.a();
原文地址:https://www.cnblogs.com/94-Lucky/p/13498354.html