什么是闭包
闭包就是能够读取其他函数内部变量的函数
闭包形成的条件
- 函数嵌套
- 内部函数引用外部函数的变量
- 内部函数被返回或其他地方调用
闭包的作用
- 数据封装/私有变量
function createCounter() {
let count = 0
return function () {
count++
return count
}
}
const counter = createCounter()
console.log(counter()) // 1
console.log(counter()) // 2
// 外部无法直接访问 count,只能通过返回的函数操作
闭包的问题
- 内存泄漏 闭包会保持对外部变量的引用,阻止垃圾回收。如果大量使用且未及时释放,可能导致内存占用过高。
function createCounter() {
let count = 0
// 这个变量是createCounter函数里面声明的,理论上当这个函数执行结束的时候就会被回收
return function () {
count++
return count
}
}
const counter = createCounter()
console.log(counter()) // 1
console.log(counter()) // 2
// 但是这里依然能够去访问这个变量