闭包

120 阅读1分钟

什么是闭包

废话少说,直接上代码,首先通过下面一段代码来理解

const createAdd = ()=>{
    let n = 0
    return ()=>{
        n += 1
        console.log(n)
    }
}
const add = createAdd()
add() // 1
add() // 2

之前了解到作用域概念,从这段代码中可以看到,n这个变量是在createAdd()这函数的作用域中声明的,并没有在箭头函数中声明,但是在箭头函数中使用了n,这个时候就理解了闭包什么:函数使用了外部变量函数使用了外部变量,还有一种情况,就是使用完被内存释放后,这时n该何去何从呢?此时n并不会被内存回收,它的内存回收是在createAdd()被释放后被回收,这就引出了闭包的另外一个作用:创建的变量会跟随其作用域一直存活在内存中创建的变量会跟随其作用域一直存活在内存中

用途

通过上面的分析,我们就可以使用闭包隐藏局部变量,暴露操作函数

缺点

那么它的缺点就是容易泄露内存。注意的是,真实原因是JS引擎的实现有问题,但是网上已经以讹传讹了。