闭包的定义——一个函数+它的词法环境
就是定义这个函数时候的环境
function App(){
let a = 0;
function add(){
a++
}
return add
}
这个函数中,add函数和它的词法环境a,就形成了一个闭包。
闭包会造成内存泄漏 1、如果这个函数被赋值了给了另一个变量,这个变量一直不销毁,这个闭包也无法销毁,就会导致内存泄漏。 2、另外还有一种内存泄漏:
function closure(){
let big = 100;
let small = 50;
function fn1(){
big
}
function fn2(){
small
}
return fn2
}
let s2 = closure()
这个时候也会导致内存泄漏,即使只有small被fn2引用,fn1已经被销毁,但是big会一直存在内存中,无法被访问,无法被回收。