从一个小例子再次理解闭包

  function fun () {
      var i = 0
      return function () {
          console.log(i++)
      }
  }
  var f1 = fun(),
      f2 = fun();
  console.log(f1);  // 因为f1 = fun() 执行 所以f1 f2 都等于 fun return 出的函数 function () {console.log(i++)}
  console.log(f2);
  f1();  // 0   f1() 是执行 f1这个函数 i++先执行在相加所以i=0
  f1();  // 1   在此执行的时候i = 1
  f2();  // 0   f2 为 0 的原因是 因为 f2 和 f1 是 fun 是实例化的两个对象

我产深的疑惑在f2()的位置,因为一开是我认为f2()输出的应该是2 因为按照闭包的思路,i会一直增加。但是我没有注意到var f1 = fun(),f2 = fun(); f1 f2是fun()实例的两个对象,他们并不会互相干扰。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值