javascript中的闭包,花了半个小时才搞明白原理

  1. function generator() {  
  2.   var i = 0;  
  3.   return function() {  
  4.     return i++;  
  5.   };  
  6. }  
  7.   
  8. var gen1 = generator(); // 得到一个自然数生成器  
  9. var gen2 = generator(); // 得到另一个自然数生成器  
  10. var r1 = gen1(); // r1 = 0  
  11. var r2 = gen1(); // r2 = 1  
  12. var r3 = gen2(); // r3 = 0  
  13. var r4 = gen2(); // r4 = 1

就是这13行代码,花了我半个小时,说实话。开始想了半天确实不知道怎么回事,后来每个alter()测试,终于发现靠谱了。如果不对请各位读者纠正 ,也让我进步进步。。。初学javascript。

首先第8,9行代码是把generator函数的执行过后返回值赋值给gen1和gen2,所以这个时候gen1应该等于

  1. function() {  
  2.     return i++;  
  3.   }; 
在看r1这步,执行了gen1所以这个时候i应该是等于0的,所以r1等于了0,所以这个时候r1等于0,然后在进行i++这个时候i属于全局变量,所以给全局变量的i赋值为1; var r2 = gen1(); 这一步i已经等于1了所以应该是输出1,这个时候在进行i++,比如在后面加1 ;var r3 = gen1();这个时候的r3就应该等于2了。gen2同理,不知道我分析得对不对,如果哪位读者无意间发现了这个博文,请指点指点,让我进步。。。谢谢了。

你可能感兴趣的:(javascript中的闭包,花了半个小时才搞明白原理)