纯属个人理解,如果有误请指出!

     让我们先看一段代码

1 function dog(){
2    var a=100;
3    a++;
4    return a;
5 }
6   alert(dog());//101
7   alert(dog());//101

     我们知道。我们不能通过局部变量来实现累加,那么来看下一段代码。

 1   function dog(){
 2    var a=100;
 3    return function(){
 4          a++;
 5          return a;
 6     }
 7 }
 8   var k=dog();
 9   alert(k());//101
10   alert(k());//102

    看第3行代码:我们把a++包装在闭包里。

    看第8行代码:我们又把闭包里的代码传递给k,相当于k=function(){a++; return a;}

    而k却恰恰是全局变量,所以此时function(){a++; return a;}在全局里,自然而然的a,就变成了全局变量,从而实现了累加。

    【总结】:function(){a++; return a;}里的a是局部变量,而function(){a++; return a;}却赋给了一个全局变量,导致

     function(){a++; return a;}始终留在内存中,而function(){a++; return a;}的存在依赖于dog(),因此dog()也始终留在内存中。