JavaScript 闭包

发布时间 2023-08-31 15:00:49作者: 默小言

前言

闭包(Closure)是JavaScript中一个非常重要的概念,指的是函数可以访问其词法作用域以外的变量。简单来说,当一个函数内部定义的函数引用了外部函数的变量时,就形成了闭包。

要理解闭包,首先需要了解词法作用域(也称为静态作用域)。词法作用域是指在代码编写阶段就确定了变量的作用域,不会受到函数的调用位置影响。在JavaScript中,每当定义一个函数时,它会创建一个作用域,这个作用域会包含函数内部声明的所有变量。

当一个函数返回另一个函数时,内部函数可以访问外部函数中声明的变量,即使外部函数已经执行完毕,这些变量依然可以被内部函数访问,这就是闭包的概念。

特点

闭包的主要特点有:

  • 内部函数可以访问外部函数的变量,即使外部函数已经执行完毕。
  • 闭包可以用于封装数据和行为,实现类似于面向对象编程的效果。
  • 闭包可以保持状态,因为它们可以访问外部函数作用域的变量。

示例代码:

function outerFunction(x) {
  let count = 0

  function innerFunction() {
    // 内部函数引用了外部函数的变量
    count = count + x
    console.log(count); 
  }

  return innerFunction;
}

const closureFunc = outerFunction(10); // 将返回的内部函数保存在变量中

closureFunc(); // 输出:10
closureFunc(); // 输出:20
closureFunc(); // 输出:30