闭包

74 阅读1分钟

概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

简单理解:闭包 = 内层函数 + 外层函数的变量

简单的写法:

function outer () {
    let a = 10
    function fn () {
        console.log(a)
    }
    fn()
}
outer()

image.png

image.png

闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量

闭包的基本格式:

    // 常见的闭包的形式   外部可以访问使用 函数内部的变量
    function outer1 () {
      let a = 100
      function fn () {
        console.log(a)
      }
      return fn
    }
    const fun1 = outer1()
    fun1() // 调用函数
    // outer() === fn === function fn () { }
    // const fun = function fn() { }

    // 常见的写法2
    function outer2 () {
      let a = 100
      return function () {
        console.log(a)
      }
    }
    const fun2 = outer2()
    fun2() // 调用函数

    // 常见的写法3
    function outer3 () {
      let a = 100
      return function () {
        return a
      }
    }
    // console.log(outer())  // 返回匿名函数
    const fun3 = outer3()
    // 调用函数
    console.log(fun3())

闭包应用:实现数据的私有

比如,我们要做个统计函数调用次数,函数调用一次,就++

image.png

总结

    1. 怎么理解闭包?
    • 闭包 = 内层函数 + 外层函数的变量
    1. 闭包的作用?
    • 封闭数据,实现数据私有,外部也可以访问函数内部的变量
    • 闭包很有用,因为它允许将函数与其所操作的某些数据(环境)关联起来
    1. 闭包可能引起的问题?
    • 内存泄漏