问答

关于JS中的闭包,求解答

作者:admin 2021-06-09 我要评论

function f1(){ var result=0; return function (){ return result++ } } let a1=f1() 1.第一次调用a1()的时候为什么输出0而不是1呢,不是已经++了吗 2.a1()多次...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
  function f1(){
      var result=0;
      return function (){
          return result++
      }
  }
 let a1=f1()

1.第一次调用a1()的时候为什么输出0而不是1呢,不是已经++了吗
2.a1()多次执行的结果是0,1,2,3....那为什么f1()()就全都是0呢
3.好多人都说result一直存在于内存中是因为a1引用的原因,那下面这个函数也是a1引用了呀,

 function f1(){
     var result=0;
     return result++
     
 }
let a1=f1()

求解答

###

第一个问题 : 为什么已经++了还是0而不是1呢,首先你要搞懂 i++ 和 ++i是两个不一样的,如果是return ++result 那么实惠输出1

第二个问题 : 因为a1()执行多次因为他们所处的作用域是一样的 , 为什么不写a1 = f1()直接f1()()每次都是输出0呢,原因就是每次f1()得到的函数都是不同的,所以产生的闭包所处作用域也是不同,所以每次输出0

###

通常情况下,函数在调用完毕,其内部变量会被自动销毁

 function f1(){
     var result=0;
     return result++
     
 }

上述f1 函数返回的是一个数值类型,用完即丢弃。每调用一次,重新生成一个。

 function f1(){
      var result=0;
      return function (){
          return result++
      }
  }

而这里的f1返回的是一个函数,它间接持有外层函数变量值result。当你使用该返回函数,你不仅拥有该函数本身,还隐性抵达有外层函数环境。正因如此,有些模式会将闭包作为某种私有权限的封装。
当你对返回的函数进行重复调用时,自然会累积操作“私有的”result
而外层函数又被调用了,则意味着又一个新的开始。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Eventloop 是什么?是为了解决什么问题

    Eventloop 是什么?是为了解决什么问题

  • 关于JS中的闭包,求解答

    关于JS中的闭包,求解答

  • 有没有通过韵母查汉字的api?

    有没有通过韵母查汉字的api?

  • 假设接收方一直不从接收缓冲区读数据,

    假设接收方一直不从接收缓冲区读数据,

腾讯云代理商
海外云服务器