Skip to content

🔧 JavaScript 中闭包是什么?

✍️ 作者:桑榆
🕓 更新时间:2025-11-07 🧠 关键词:闭包、词法作用域、防抖节流

一、什么是闭包?

闭包是指一个函数能够访问并操作其词法作用域外部的变量。 一个函数可以访问此函数的父级及以上作用域的变量,那么这个函数就被称为闭包。 闭包会创建一个包含外部函数作用域变量的函数,并将其保存起来, 以便在外部函数执行完毕后,仍然可以访问到这些变量。

听到这里是不是已经😳了

什么是词法作用域啊?

词法作用域也叫静态作用域/闭包作用域。是指函数在定义时确定的作用域,而不是函数调用时确定的作用域。他是函数在定义时所处的上下文环境决定的, 与函数调用的位置无关

  • 函数内部可以访问函数外部的变量
  • 函数内部的变量在函数外部不可访问
  • 函数内部可以访问函数外部的函数
  • 函数内部的函数可以访问外部函数的变量
js
function fn1 () {
    let a = 1;
    function fn2 () {
        a++;
        console.log(a);
    }
    return fn2;
}
const fn2 = fn1();
fn2(); // 2
fn2(); // 3

二、闭包的作用

  • 1.分装私有变量

    闭包可以用于创建私有变量和方法。通过在函数内部定义变量,并返回一个内部的函数,外部无法直接访问到这些变量, 从而达到了封装的效果。

  • 2.回调机制

    闭包可以用于实现回调机制。当一个函数作为参数传递给另一个函数时, 可以通过闭包来访问到外部函数的变量,从而实现回调函数的调用。

  • 3.实现柯理化函数