js中的闭包

439 阅读1分钟

  • 什么是闭包?

这里就要用到函数变量的作用域了,函数的内部可以直接读取全局变量,但是函数的外部无法读取函数内的局部变量。那么,如果我们要读取函数内部的局部变量,就需要再写一个函数,读取到想要的局部变量。即闭包就是能够读取其他函数内部变量的函数。简单来说我们说如果一个函数加上了外部的变量,这个函数加上这个变量就是闭包。

function f1(){
    let a = 2                         //声明一个局部变量,这个变量可以在f2中访问
    function f2(){                    //声明一个函数
        console.log(a)                //访问函数外部的变量
    }
}

  • 闭包的用途

间接访问一个变量。在实际开发中,有些变量我们不能直接访问,害怕不小心被更改;也不能放在局部变量中,这样找不到。所以需要闭包这个桥梁。用一个函数间接访问。以游戏中的生命条数举例。

!function(){

  var lives = 50

  window.奖励一条命 = function(){
    lives += 1
  }

  window.死一条命 = function(){
    lives -= 1
  }

}()

(代码转载方应杭老师——“每日一题”js中的闭包是什么?)

  • 闭包的缺点

闭包会使使函数中的变量保存在内存中,所以大量的使用闭包就会造成大量的变量堆积在内存中。让网页性能变差。另外,在ie中,使用完闭包后,根本回收不了引用后的变量。就造成了网上常说的内存泄露。然而要清楚。这不是闭包的原因。这是ie的原因。