《前端面试经典》---闭包

4 阅读1分钟

闭包的定义——一个函数+它的词法环境

就是定义这个函数时候的环境

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会一直存在内存中,无法被访问,无法被回收。