什么是闭包
闭包简单点来说就有两个函数, 其中一个函数在另一个函数内, 内部函数并且使用了外部函数的变量,你不知道的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('--')
}
当然闭包也是有优点的, 比如在 vue 中 data 是一个函数,利用函数来形成一个闭包保护变量的私有性