闭包

 $('div').click(function () {
               var timer = -1;
               return function () {
                   if (timer > 0) {
                       console.log(false);
                       return false;
                   } else {
                       timer = setTimeout(function () {
                           timer = -1;
                       }, 5000);
                       console.log(true);
                       return true;
                   }
               };
           }());

  实际上可以这样来理解,为div绑定click事件的时候 执行了外层function,这个函数的返回值是内层函数,因此,将内层函数绑定到了click事件上。同时,内层函数引用了外层函数的变量,该变量不会被回收。

  注:在同一个作用域链中定义的所有闭包共享同一个变量或私有变量,如:

  

function constfuncs(){
         var funcs = [];
         for(var i=0;i<10;i++) {
             funcs[i] = function(){return i;};
           }
           return funcs;
 }  
 var funcs = constfuncs();
 console.log(funcs[5]());//10,全部都返回10

funcs[0],funcs[1],...,funcs[9]共享变量i

posted @ 2016-03-10 17:09  Rella  阅读(145)  评论(0编辑  收藏  举报