什么是闭包?

97 阅读1分钟

闭包

什么是闭包

闭包是一种语法特性。 js 的所有函数都支持闭包

// 对于一个函数来说,变量类型有:全局变量、局部变量、自由变量。
闭包 = 函数 + 自由变量(非全局变量,非局部变量)
{
    let a = 1
    function test() { // 这个函数访问了它外部的自由变量(不是全局变量),这个函数,和这个自由变量,就形成了一个闭包。
        a = a + 1
    }
    // 这里的自由变量不能是全局变量,因为如果是全局变量,在哪里都能访问,所以没办法区分是闭包提供的访问外部变量的能力,还是全局变量提供的能力。
}

一般将上面的代码防在非全局环境里面,即这样写:

var test = function () {
    let a = 2
    const res = () => {
        a = a + 1
    }
    return res
}
// 这里的 a 和函数 res 形成了闭包

// 或者可以直接这样写
const test2 = function () {
    let a = 2;
    return () => a = a + 1
}

闭包有什么作用:

  1. 避免污染全局环境。
  2. 提供对局部变量的间接访问。
  3. 维持变量,避免被垃圾回收。

优缺点:

  • 优点:简单、好用。
  • 缺点,闭包使用不当,会导致内存泄漏。
  • 解决办法:少用闭包,慎用闭包。