zoukankan      html  css  js  c++  java
  • JavaScript闭包

    闭包

    • 函数嵌套函数, 内部函数可以引用外部函数的参数和变量(突破作用域链), 参数和变量不会被垃圾回收机制回收
      可以理解为是联系函数内部和函数外部的桥梁
    • 注意:
      • 闭包会使得函数中的变量都被保存在内存中, 内存消耗很大, 所以不能滥用闭包, 否则会造成网页的性能问题. 尽量在退出函数之前, 将不使用的局部变量全部删除
      • 闭包会在父函数外部改变父函数内部变量的值, 所以如果把父函数当做对象(object)使用, 把闭包当做它的公用方法, 把内部变量当做它的私有属性, 这时不要随便改变父函数内部变量的值

    以下有三种方式:

    • 直接定义函数
      <script>
        function aaa(a){
          var b = 5;
          function bbb(){
            a++;
            b++;
            alert(a);
            alert(b);
          }
          // 返回内部函数
          return bbb;
        }
        var ccc = aaa(10);
        ccc();    //弹出11, 6
    
      </script>
    
    • 直接返回函数
      <script>
        function a(){
          var num = 10;
          return function(){
            return num+1;
          }
        }
        var aa = a();
        alert(aa());    // 弹出11
    
      </script>
    
    
    
    • 把内部函数赋给变量
      <script>
        function a(){
          var num = 10;
          b = function(){
            return num+1;
          }
        }
        a();
        alert(b());    // 弹出11
    
      </script>
    
    
    
    • 混合使用
      <script>
        function f1(){
          var n=1;
          test=function(){
            n+=1;
          };
          function f2(){
            alert(n);
          };
          return f2;
        }
        var res=f1();
        res();    // 弹出 1
        test();
        res();    // 弹出 2
      </s
    
    • 迭代计数
      <script>
        function test(x){
          var i=0;
          var demo=function(){
            return(x[i++]);
          }
          return demo;
        }
        var next=test(['a', 'b', 'c', 'd']);
        alert(next());    // a
        alert(next());    // b
        alert(next());    // c
        alert(next());    // d
      </script>
    
  • 相关阅读:
    关于互联网产品经理的认知
    互联网产品经理的工作职责
    软件需求分析方法
    Enumeration遍历http请求参数的一个例子
    jquery datatable使用简单示例
    改变输出的文字的字体格式
    excel 类获取起始列和使用列
    调试不能命中断点
    CString转换为const char*
    __declspec(dllexport)
  • 原文地址:https://www.cnblogs.com/qlshine/p/5927759.html
Copyright © 2011-2022 走看看