闭包
闭包指有权访问另一个函数作用域中变量的函数
形如内部函数保存在外部时,将会产生闭包,
闭包会导致原有作用域链不释放,造成内存泄漏(内存占用的多,剩的少,就像内存泄漏)
例1:
function a() {
function b() {
var b=234;
document.write(aaa);
}
var aaa=123;
return b;
}
var glob=100;
demo=a();
demo();
结果:打印123
a( )执行,a的作用域链AOa,GO
b( )定义,保存a( )的作用域
a( )执行完,与AOa的连线断开,即指向AOa
b( )执行,产生AOb放在b( )的作用域链最顶端
重要 例2
function test() {
var arr=[];
for(var i=0;i<10;i++){
arr[i]=function () {
document.write(i+"");
}//关键点 看成arr[i]=函数 ,并不执行函数里的执行语句 ,只进行函数的定义,循环完10次后,i=10
}
return arr;
}
myarr=test();
for(var j=0;j<10;j++){
myarr[j]();
}
//其中
arr[i]=function () {
document.write(i+"");
}//关键点 看成arr[i]=函数 ,并不执行函数里的执行语句 ,只进行函数的定义,循环完10次后,i=10
}
return arr;
}
myarr=test();
for(var j=0;j<10;j++){
myarr[j]();
}
结果:十个10
testAO{
arr:fun
i:10
}