• javascript 闭包的学习


    闭包的学习 

    1.什么是闭包?

    2.闭包有什么好处?应用在那里?

    3.闭包需要注意得地方?

    这是我学习javascript 闭包的方向:

    闭包的定义:函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回,什么意思?好抽象哦

    function a(){   // 先定义一个函数
       var i=1;
       function b(){
        alert(i);  // 这里弹出的是1;没错就是1,这里正应证了函数嵌套函数,内部函数可以引用外部函数的参数和变量
      }
       return b();
    } a();
    //执行函数

    这里我再说一下js垃圾回收机制

    function aaa(){
        var a = 1;
        a++;
        alert(a);
    }
    aaa(); //这里执行的时候弹出的2;

    aaa();在执行一次的时候弹出的还是2;  为什么呢,哈哈,这里就涉及js 的垃圾回收机制,var a=1;是局部变量,没有被引用,一旦aaa()执行后会销毁 a变量;在执行时又

    重新创建var a=1;所以两次都是弹出的是2;那怎样才不会销毁呢,想一直累加?

    var a = 1;//定义一个全局变量
    function aaa(){
          a++;
         alert(a);
    }
    aaa();  // 弹出是2
    aaa();//弹出的是3

    这里的a 没有被销毁,a是一个全局变量,所以一直引用,这就是js的垃圾回收机制,可是我想在内部一直累加行不行呢

    可以的。。。。。

    function a(){
       var a=1;
       function b(){
          a++;
          alert(a);
      }
      return b;
    }
    var c=a();
    c(); //2
    c(); //3

    //为什么会是3呢,这里就涉及js的垃圾回收机制

    function b(){
      a++;
      alert(a)
    }  // 这里的a 一直引用着,并没有销毁a 变量,所以才会累加

    好处:

    1.希望一个变量长期驻扎在内存当中

    2.避免全局变量的污染

    3.私有成员的存在

    用法:

    1.模块化代码
    2.在循环中直接找到对应元素的索引

    var a = 1;
    function aaa(){
        a++;
        alert(a);
    }
    
    aaa(); //2
    aaa(); //3
    function aaa(){
        var a = 1;
        a++;
        alert(a);
    }
    aaa(); //2
    aaa(); //2
    alert(a); ===>a is not defined
    function aaa(){
        var a = 1;
        return function(){
            a++;
            alert(a);
        }
    }
    var b = aaa();
    b(); //2
    b(); //3
    alert(a); ===>a is not defined
    var aaa = (function(){
      var a = 1;
      return function(){
        a++;
        alert(a);
      }
    })();
    aaa(); //2
    aaa(); //3
    
    
    var aaa = function(){
      var a = 1;
    function bbb(){
        a++;
        alert(a);
      }
      function ccc(){
        a++;
        alert(a);
      }
      return {
        b : bbb,
        c : ccc
      }
    }();
    aaa.b(); //2
    aaa.c(); //3

    alert(a); // 这里访问不到的 ====>a is not defined alert(bbb);// 这里访问不到的 ====>bbb is not defined alert(ccc);//这里是访问不到的 ====>ccc is not defined
    function aaa(){
      alert(1);
    }
    aaa();
    (function(){
      alert(1);
    })();
    
     

    这里怎样才点击的到li 的下标呢

    <script>
    window.onload = function(){
    var aLi = document.getElementsByTagName('li');
    
    for(var i=0;i<aLi.length;i++){
      (function(i){//这里是传递参数
         aLi[i].onclick = function(){
            alert(i);
         };
        })(i);//这里的 i 作为参数传人
    }
    </script>
    
    
    
    
    <script>
    window.onload = function(){
    var aLi = document.getElementsByTagName('li');

    for
    (var i=0;i<aLi.length;i++){  aLi[i].onclick = (function(i){    return function(){     alert(i);
      }   })(i);   }
    };
    </script>
     
    <ul>
      <li>11111111111</li>
      <li>11111111111</li>
      <li>11111111111</li>
    </ul>

    如有错误,请留言

  • 相关阅读:
    ENVI数据格式
    旋转卡壳模板
    旋转卡壳求两个凸包最近距离poj3608
    树状数组模板
    输入输出挂
    Catalan数以及使用Raney引理证明
    【转】AC神组合数取模大全
    单向HASH——MurmurHash
    hdu4063(圆与圆交+线段与圆交+最短路)
    字符串HASH模板
  • 原文地址:https://www.cnblogs.com/jifengdehao/p/5701962.html
Copyright © 2020-2023  润新知