$('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