闭包是,就是引用不是在自己作用域内的变量。
函数a执行结束时应该销毁其中的局部变量a变量,但子函数b调用了父函数a的变量,导致变量a一直为函数b保存在内存中以供函数b引用;
function a(){
var a= 0;
return function (){
var b = 1;
return a+b;
}
}
举例说明:
for(var i=0 ; i < 10; i++){
$(document).on("click",function(){
alert(i)
})
}
以上当点击document时,循环弹出10;因为循环绑定点击事件调用的 变量 i 并不是循环的自增的 i 的实际的值,而是指向 i 的引用;点击事件并不是立即执行的,因此click事件执行时,for循环已经结束,引用的 i 值 为10,想要取到循环中的变量i可以用立即执行函数,这时点击事件中 i 不在指向父函数作用域下的 i 而是指向自执行函数传入的函数内部的参数 。如下;
for(var i=0 ; i < 10; i++){
(function savei(i){
$(document).on("click", function(){
alert(i);
});
})(i)
}