zoukankan      html  css  js  c++  java
  • 对闭包的一点小认识

    1.什么是闭包?

    当在函数内部定义了其他函数时,就创建了闭包。闭包有权访问包含函数内部的所有变量。

    2.举个小例子吧。(摘自它处)

    function outer(x){

      var tmp=1;

      return function(y){

      alert(x+y+(++tmp));

    }

    }

    var bar=foo(2);

    bar(10);

    结果是:alert16

    结论:内部的function可以访问外部变量x和tmp,所以内部的function是闭包。

    3.闭包会导致内存占用过多和内存泄漏(闭包的作用链中保存着一个html元素)。

    4.为对象数组元素加顺序问题的常用解决办法之一是闭包,之二是使用自定义属性。

    闭包:

    function f1(){

      var arr=new Array();

      for(var i=0;i<10;i++){

        arr[i]=function(num){

          return function(){

            return num;

          };

        }(i);

      }

      return arr;

    }

    自定义属性:

    <body>
    <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    </ul>
    <script type="text/javascript">
    var lis=document.getElementsByTagName('li');
    for(var i=0;i<4;i++)
    {
    lis[i].index=i;
    }
    console.log(lis[2].index);
    </script>
    </body>

    结果是:2

    5.递归函数最好使用arguments.callee来递归的调用本身。

    function factorial(num){

      if(num<=1){

        return 1;

      }

      else{

        return num*arguments.callee(num-1);

      }

    }

  • 相关阅读:
    RequireJS进阶(二)
    JavaScript判断元素为数字的奇异写法
    RequireJS进阶(三)
    RequireJS进阶(一)
    读Ext之十四(Ext元素)
    JavaScript中__proto__与prototype的关系
    工作流术语
    一个例子(Hello World)
    无题
    再谈调用子流程(1)
  • 原文地址:https://www.cnblogs.com/cdx0/p/closure.html
Copyright © 2011-2022 走看看