• 4
  • 新人请关照

关于JS中的闭包,求解答

  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()

求解答

阅读 148
评论
    2 个回答
    • 230

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

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

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

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

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