JavaScript闭包

标签: 闭包  JavaScipt  变量作用域  变量类型

1、javaScript变量有2种。全局变量,私有变量,而私有变量可用到闭包。

     区分说明;

  var a=1;
  d=1;
function init(){
   b=2;
  var c=3;
  return a*b*c;
}
函数init中,函数外声明的a、没有使用关键字var声明的变量b、d都是全局变量,属于window对象,作用于该html页面所有js文件。

 2.变量作用域

javaScript变量的作用域无非就是两种:全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。

    var a=1;
  function f1(){
    alert(a);
  }
  f1(); //1
另一方面,在函数外部自然无法读取函数内的局部变量。
  function f1(){
    var a=1;
  }
  alert(a); //Uncaught ReferenceError: a is not d否则,实际上声明了一个全局变量!
  function f1(){
    a=1;
  }
  f1();
  alert(a); // 1

3.理解闭包

          以我个人通俗的理解有2个点。1、闭包的形式就是一个函数包含另一个函数;2、闭包的作用就是使一个函数能够读取其他函数内部变量;3、闭包的本质就是将函数内部和函数外部连接起来的一座桥梁。闭包就是被包裹函数可以访问外层包裹函数作用域里的变量,即使上一层函数已经执行完(关闭)。

         缺点:1、大量使用闭包会增加内存消耗,使得函数内的变量一直占用内存,影像性能。优点:1、加强变量私有性、安全性、避免全局污染;

         实例说明

1.常规写法
function outFun(){
    var a=0;
    a+=1;
    return a
}
//连续调用3次,私有变量,函数执行后被回收
outFun();//1
outFun();//1
outFun();//1

1.闭包写法
  var outFun=(function(){
     var a =0;
     return function(){
        return a+=1;
     }
  })();
  双括号匿名函数初始化值执行一次,初始化a=0;将里面的匿名函数表达式返回给outFun变量,而变量a每次执行后一直保存在内存中。

    




 

       

闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭
版权声明:本文为cholee_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cholee_/article/details/80434175