前端经典问题 "闭包"

135 阅读1分钟

什么是闭包

闭包简单点来说就有两个函数, 其中一个函数在另一个函数内, 内部函数并且使用了外部函数的变量,你不知道的JavaScript 上卷 给出的解释是 : 当函数可以记住并访问所在的词法作用域时, 就产生了闭包

function foo() {
    const a = 2
    function bar(){
        console.log(a)
    }
    bar()
}
foo()
// 摘自于 你不知道的JavaScript 上卷 44页

闭包的用途是什么?

简单点来理解的话, 用到回调函数的地方, 其实就使用到了闭包, 比如, ajax 请求, 跨窗口通信, 或者任何其他的异步任务中只有使用了对应的回调函数, 还有闭包应用在模块中, 每个模块之间互不影响

闭包的缺点是什么?

内存溢出与内存泄漏

内存溢出
1.一种程序运行出现的错误
2.当程序运行需要的内存超出了剩余的内存时,就会报错内存溢出的错误\

var obj = {}
for (var i = 0 ;i < 10000;i++){
    obj[i] = new Array(1000000)
    console.log('--')
}

当然闭包也是有优点的, 比如在 vuedata 是一个函数,利用函数来形成一个闭包保护变量的私有性