浅谈js闭包

什么是闭包

MDN的定义:一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。

我们可以把闭包简单理解成"定义在一个函数内部的函数"。内部函数总是可以访问其所在的外部函数中声明的变量,即使在其外部函数被返回(寿命终结)了之后。所以,闭包让外部访问函数内部变量成为可能,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包有哪些特点

闭包让外部访问函数内部变量成为可能;

可以避免使用全局变量,防止全局变量污染;

局部变量会常驻在内存中,会造成内存泄漏(有一块内存空间被长期占用,而不被释放),所以不能滥用闭包,否则会造成网页的性能问题;

每次外部函数执行的时候,都会重新创建一个新的地址。但凡是外部函数中有被内部函数引用的数据,那么这个时候,这个数据一直不删除,保留一根指针给内部函数。闭包找到的是同一地址中外部函数中对应变量最终的值;

闭包的应用举例

function fn(){
  var i = 0
  return function(){
      i++
      console.log(i)
  }
}
var counter1 = fn() //每次外部函数执行的时候,都会开辟一块内存空间,创建一个新的地址
counter1()  //1
counter1()  //2
var counter2 = fn()
counter2()  //1
counter2()  //2

 

posted @ 2020-12-20 20:30  奥利奥ALA  阅读(100)  评论(0)    收藏  举报