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