闭包

作者: 海山城 | 来源:发表于2018-05-02 16:57 被阅读0次

    什么是闭包?

    • 函数在执行的过程中,先从自己内部找变量
    • 如果找不到,再从创建当前函数所在的作用域(词法作用域)去找, 以此往上
    • 注意找的是变量的当前的状态

    函数连同它作用域链上的要找的这个变量,共同构成闭包

    • 实例一
    function car(){
      var speed = 0
      function fn(){
        speed++
        console.log(speed)
      }
      return fn
    }
    
    var speedUp = car()
    speedUp()   //1
    speedUp()   //2
    

    fn和变量speed构成一个闭包

    • 实例二
    !function(){
    
      var lives = 50
    
      window.addOneLife = function(){
        lives += 1
        console.log('当前lives:', lives)
      }
    
      window.reduceOneLife = function(){
        lives -= 1
        console.log('当前lives:', lives)
      }
    
    }()
    addOneLife() //51
    addOneLife() //52
    

    function(){lives += 1;console.log('当前lives:', lives)}和lives构成一个闭包
    function(){lives -= 1;console.log('当前lives:', lives)}和lives又是一个闭包

    闭包有什么用呢?

    1.访问其他函数内部的变量

    上述实例一的speed以及实例二的lives都是定义在外部函数中,而内部的函数却可以访问到

    2.暂存数据

    上述实例一中的speedUp 以及实例二中的addOneLife 、reduceOneLife 是全局一直存在的,除非页面销毁。因此他们对应的声明的函数就一直存在,因此函数内部的变量speed,lives就一直存在

    相关文章

      网友评论

          本文标题:闭包

          本文链接:https://www.haomeiwen.com/subject/stpcrftx.html