1、什么是闭包?
闭包是一个函数中申明了另一个函数。
2、闭包在什么时候能保存外部函数的变量?
必须外部函数执行后才能保存(指函数表达式被激活的时候,匿名函数表达式的激活有:call就是()调用,()分组,还有就是return的时候。)
函数是不是值得来锁定一个变量,是看该变量在调用这个函数的时候,是不是能在上下文作用域中找到这个变量,如果无法在调用时找到这个变量,内部函数就会锁住它,否则就不会锁住
正确方式:
<a href="javascript:void(0)" id="a1" >aa</a>
<a href="javascript:void(0)" id="a2" >bb</a>
<a href="javascript:void(0)" id="a3" >cc</a>
<a href="javascript:void(0)" id="a4" >dd</a>
for(i=1;i<=4;i++){
var a = document.getElementById("a"+i);
return function(){
alert(i);
}
}
a.οnclick=handel(i);
}
//错误方式:
for(i=1;i<=4;i++){
var a = document.getElementById("a"+i);
a.οnclick=function(){
alert(i);
}
}
//总来讲,注意执行时期
3、闭包是否影响性能
1、闭包函数会一直引用外部函数的变量,除非你主动释放
2、闭包导致作用域链的改变,尽量用变量重新引用外部的变量。
4、闭包的作用:
1、保护变量
2、保存变量