在 JavaScript 中,闭包是指函数和其词法环境的组合。当函数内部的函数通过词法作用域访问外部函数的变量时,即形成了闭包。
闭包形成的条件包括:
- 在函数内部定义了另一个函数。
- 内部函数可以访问外部函数的变量。
- 外部函数返回内部函数。
例如,以下代码中的 outer 函数返回了内部的 inner 函数,并且内部函数可以访问外部函数的变量 x。
function outer() {
let x = 10;
function inner() {
console.log(x);
}
return inner;
}
let closure = outer();
closure(); // 输出 10
在这个例子中,inner 函数形成了闭包,因为它可以访问并保持对 x 变量的引用,即使 outer 函数已经执行完毕并返回了。闭包允许 inner 函数在其词法作用域外访问 x 变量,即使在 outer 函数执行后,x 变量仍然存在于闭包的环境中。