对闭包的一点小认识

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);

  }

}

posted @ 2017-10-11 17:36  张若昀的小迷妹  阅读(148)  评论(0编辑  收藏  举报