什么是闭包

  1. 闭包是一个可以访问外部作用域的内部函数,即使这个外部作用域已经执行结束

  2. 闭包是指那些能够访问自由变量的函数。 自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量

以上2种说法都可以,看自己理解,示例:

function log(fn) {
  const a = 200
  fn()
}

const a = 301
function fn() {
  console.log(a)
}

log(fn) // 301

闭包的使用场景

防抖节流,自定义缓存,隐藏数据(设置私有属性),只提供API(接口参数隐藏)

function createCache() {
  const data = {} // 闭包中被隐藏的数据,不被外界访问
  return {
    set: function (key, val) {
      if (!key) return null
      data[key] = val
    },
    get: function (key) {
      if (!key) return null
      return data[key]
    }
  }
}

const cache = createCache()
cache.set('a', 100)
console.log(cache.get('a')) // 100

(待补充防抖和节流函数)

上次更新:
贡献者: QingYiXiaoYao