闭包的基本概念以及应用

101 阅读1分钟

作用域链

作用域:全局作用域、局部作用域 局部作用域:当声明了一个函数,函数内部就形成了一个局部作用域。 作用域链:当执行代码的时候,如果要访问一个变量,首先看变量是否在自己的局部作用域里面,如果是就直接用,如果没有就往上一级的作用域中查找,一直查找到全局作用域。这就形成了一个链,作用域链(作用域链的查找机制)

例子:

    <script>
      let a = 1
      function g() {
        let a = 2
        function f() {
          a++
          console.log(a)
        }
        f()
        return f
      }
      let b = g()
      b()
      console.log(a)
    // 结果 3  4  1
    </script>
    

闭包

闭包:函数嵌套函数,内部的函数就是闭包。 内部的函数,可以访问外部函数的局部变量

  • 问题:正常情况下,函数执行完毕,内部局部变量会销毁(销毁:释放内存空间),但是闭包的内部函数没有执行完成,外部函数的变量不会被销毁
  • 解决:函数执行完毕后,给变量手动赋值为null
  • 闭包的应用:封装一段代码,实现模块化功能。防止全局污染。内部的局部变量是独立的。