作用域文章

闭包文章

闭包题

什么是自由变量呢?

自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量。

从技术的角度讲,所有的JavaScript函数都是闭包

从实践角度:以下函数才算是闭包

  1. 在代码中引用了自由变量
  2. 即使创建它的上下文已经销毁,它仍然存在(比如,内部函数从父函数中返回)
      function foo() {
        var a = 'aa'
        let b = 'bb'

        function bar() {
          const c = 'cc'
          const d = 'dd'

          console.log(a)
          console.log(b)

          function car() {
            console.log(c)
          }
          console.dir(car)
        }

        bar()
        console.dir(bar)
      }

      foo()