纯属个人理解,如果有误请指出!
让我们先看一段代码
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()也始终留在内存中。
原文:http://www.cnblogs.com/millent/p/4865200.html