JavaScript闭包

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每次执行后一直保存在内存中。

    




 

       

闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值