闭包

闭包

什么是闭包

闭包就是一个函数,两个函数彼此嵌套,内部函数就是闭包 形成闭包条件是内部函数需要通过return给返回出来.

<script type="text/javascript">
        function f1() {
            var name="tom";
            var age=18;
            function f2() {
                console.log("名字:"+name+"--身高:"+age);
            }
            return f2;
        }
        var ff=f1();//ff就是一个闭包,其和f2共同指向同一个function
        ff();
</script>

解释:

f1()调用完成后,垃圾回收器会回收name和age,但是因为ff又去指向function,这样function内部的age和name仍然存在,并且与外部变量无关

闭包使用规则

同一个闭包机制可以创建多个闭包函数出来,它们彼此没有联系,都是独立的。 并且每个闭包可以保存自己个性化的信息。

<script type="text/javascript">
    function f1(){
        var name="tom";
        var age=18;
        function f2(){
            console.log("名字:"+name+",年龄:"+age);
        }
        return f2;
    }
    var ff1=f1();
    var ff2=f2()
    var ff3=f3();
</script>

闭包案例

闭包生成数组元素

<script type="text/javascript">
        var arr=new Array();
       for(var i=0;i<4;i++){
           arr[i]=function () {
               console.log(i);
               return i;
           }
       }
        arr[2]();  //4
        arr[1]();  //4
        arr[0]();  //4
        arr[3]();  //4
</script>

使用闭包

<script type="text/javascript">
        var arr=new Array();
       for(var i=0;i<4;i++){
           arr[i]=f1(i);
       }
       function f1(n) {
           function f2() {
               console.log(n)
           }
           return f2;
       }
        arr[0]();  //0
        arr[1]();  //1
        arr[2]();  //2
        arr[3]();  //3
</script>

闭包事件操作

<script type="text/javascript">
      window.onload=function () {
          var cars=document.getElementsByTagName('li');
          //可以利用闭包给每个元素设置独立的函数处理
          //并且函数内部也有独特的下标信息供访问
            for(var i=0;i<3;i++){
                cars[i].onmouseover=over(i);
                cars[i].onmouseout=out(i);
            }
          var col=['red','green','blue'];
          function over(n) {
              function f2() {
                  cars[n].style.backgroundColor=col[n];
              }
              return f2;
          }
          function out(n) {
              function f2() {
                  cars[n].style.backgroundColor="";
              }
              return f2;
          }
      }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值