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同理,不知道我分析得对不对,如果哪位读者无意间发现了这个博文,请指点指点,让我进步。。。谢谢了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值