闭包是,就是引用不是在自己作用域内的变量。

函数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)
}

  

posted on 2017-04-28 16:22  前端小透明  阅读(173)  评论(0编辑  收藏  举报