闭包是函数和声明该函数的词法环境的组合。当函数被定义时,它的内部属性 [[Scope]] 会保存当前的作用域链,即使函数后来被调用时已离开原作用域,仍能访问那些变量。

论据/示例

function outer() {
  let count = 0;  // 被闭包"记住"的变量
 
  return function inner() {
    count++;
    return count;
  };
}
 
const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
  • JavaScript 采用词法作用域(静态作用域),函数的作用域在定义时确定,而非调用时

关联