博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对闭包的一点小认识
阅读量:4696 次
发布时间:2019-06-09

本文共 913 字,大约阅读时间需要 3 分钟。

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

  }

}

转载于:https://www.cnblogs.com/cdx0/p/closure.html

你可能感兴趣的文章
TestNG系列教程:并行执行测试
查看>>
CenOs 部署记录
查看>>
BZOJ4017 小Q的无敌异或 好题
查看>>
python中的append的用法
查看>>
老邪谈聚美优品
查看>>
压缩归档tar
查看>>
css-去掉IE浏览器自带×号
查看>>
HashMap的自定义实现
查看>>
springmvc上下文与springcontext上下文的关系
查看>>
IPU VPU GPU的关系
查看>>
五花八门开源类库,框架
查看>>
ajax 提交form格式 和 json格式
查看>>
使用SimpleDateFormat类来实现时间跟字符串的转化
查看>>
CDZSC_2015寒假新人(4)——搜索 - D
查看>>
SPOJ Count on a tree 主席树+lca
查看>>
jQuery应用操作之---网页选项卡(tabs)
查看>>
oh-my-zsh: bracketed-paste-magic:zle:47: not enough arguments for -U
查看>>
假期周进度报告3
查看>>
现在k8s新版里,如何在每个node上运行一个带privileged的daemonset
查看>>
试玩GitHub
查看>>