闭包

85 阅读1分钟

1. 闭包的定义

闭包就是A函数内部定义的B函数(B函数中会引用A的词法作用域),被传递或返回出去,并且在外部调用,这就是闭包。我们用代码来表达一下。

function foo() {
  var a = 2;

  function bar() {
    console.log( a );
  }

  return bar;
}

var baz = foo();

baz(); // 2 这就形成了一个闭包

foo函数返回了内部的bar函数,将foo赋值给baz并调用时,bar被调用。bar()的时候会引用外界foo的作用域,这个引用就叫做闭包

2. 闭包的问题

闭包能否大量使用呢?不可以,因为过度使用会导致性能问题。 还是上述代码,bar一直持有对于foo作用域的引用,那么自然不能被垃圾回收机制销毁,所以如果过度使用会导致大量内存占用无法释放的情况————内存泄漏。