闭包

闭包是一种特殊的对象。

它由两部分组成:

  • 执行上下文(A)
  • 该执行上下文中创建的函数(B)

当B执行时,如果访问了A中变量对象中的值,就会形成闭包。

使用场景:

  • 函数作为返回值
  • 函数作为参数来传递
let fn = null
function foo() {
  let a = 2
  function innnerFoo() {
    console.log(a)
  }
  fn = innnerFoo // 将 innnerFoo的引用,赋值给全局变量中的fn
}

function bar() {
  fn() // 在innnerFoo的变量对象中没有a变量,往foo的变量对象中查找,层层往上,实在找不到则赋值undefined
}

foo()
bar() // 2