定义
闭包是一种特殊的对象。
它由两部分组成。执行上下文(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了。