闭包

123 阅读1分钟

什么是闭包

如果一个函数用到了函数外的变量,那么这个变量以及这个函数就是个闭包

举个简单的例子

function f1(){
    var n=111;
    function f2(){
        console.log(n)  //111
    }
}

在上述代码中,函数f2在函数f1的内部,这个时候,f1内部的所有局部变量对于f2都是可见的,反过来则行不通。

因此闭包可以简单理解成**“定义在一个函数内部的函数”**

闭包的用途

  1. 闭包常常用来间接访问一个变量,也可以说成隐藏一个变量

    • 当我们不想让别人直接访问一个变量的时候,就会选择声明一个局部变量,但是局部变量别人又访问不到,于是暴露一个函数,让别人可以间接的访问
function(){
  var n =10
  window.xxx = function(){
      n++
  }
  window.yyy=function(){
      n--
  }
}()

当其他js文件调用window.xxx或者window.yyy的时候,就可以操作到n的值了

  1. 闭包还可以让这些变量始终保持在内存中,不会因为外部函数被调用后便被自动清除。

闭包的缺点

之前提到了,闭包会将变量一直保持在内存中,因此如果滥用闭包的话,内存消耗就会很大,十分影响网页的性能,在IE中甚至可能会造成内存泄漏。

解决的方法其实也很简单,在每次退出函数之前,将不使用的变量全部删除就行了