关于闭包

11 阅读1分钟

什么是闭包

闭包就是能够读取其他函数内部变量的函数

闭包形成的条件

  • 函数嵌套
  • 内部函数引用外部函数的变量
  • 内部函数被返回或其他地方调用

闭包的作用

  1. 数据封装/私有变量
function createCounter() {
  let count = 0
  return function () {
    count++
    return count
  }
}

const counter = createCounter()
console.log(counter()) // 1
console.log(counter()) // 2
// 外部无法直接访问 count,只能通过返回的函数操作

闭包的问题

  1. 内存泄漏 闭包会保持对外部变量的引用,阻止垃圾回收。如果大量使用且未及时释放,可能导致内存占用过高。
function createCounter() {
  let count = 0
  // 这个变量是createCounter函数里面声明的,理论上当这个函数执行结束的时候就会被回收
  return function () {
    count++
    return count
  }
}

const counter = createCounter()
console.log(counter()) // 1
console.log(counter()) // 2

// 但是这里依然能够去访问这个变量

闭包的使用场景