闭包

47 阅读1分钟

定义

闭包是一种特殊的对象。

它由两部分组成。执行上下文(A),以及在该执行上下文中创建的函数(B)。

当B执行时,如果访问了A中变量对象中的值,那么闭包就会产生。

函数执行上下文

function fn () {
  var a = 20;
  console.log(a)
}
fn(); // 20
console.log(a) // error

如上例,a变量只能在fn函数这个执行上下文中使用。跳出这个上下文,就找不到该变量了。

函数执行完毕后,这个执行上下文就会删除。

内存回收机制

JavaScript拥有自动的垃圾回收机制,关于垃圾回收机制,当一个值,在内存中失去引用时,垃圾回收机制会根据特殊的算法找到它,并将其回收,释放内存。

函数的执行上下文,在执行完毕之后,生命周期结束,该函数的执行上下文就会失去引用。其占用的内存空间很快就会被垃圾回收器释放。而有一种情况下是不会释放的,那就是闭包

function fn () {
  var a = 20;
  return function () {
    console.log(a)
  }
}
const fnA = fn();

如上例,当执行fnA函数时,就能访问到fn函数的变量a了。