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作用域的引用,那么自然不能被垃圾回收机制销毁,所以如果过度使用会导致大量内存占用无法释放的情况————内存泄漏。