闭包是,就是引用不是在自己作用域内的变量。
函数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)}