在 JavaScript 中,闭包是指函数可以访问在其词法作用域之外的变量。这个特性使得 JavaScript 中的闭包非常强大,可以用来创建私有变量和函数等。在闭包中,词法作用域的查找顺序是先在函数本身的内部作用域中进行查找,如果没有找到,则往上一级的作用域中进行查找,直到找到为止。
下面是一个 JavaScript 闭包的示例:
function outer() {
var x = 10;
function inner() {
console.log(x);
}
return inner;
}
var fn = outer();
fn(); // 输出:10
在这个示例中,outer
函数返回了一个函数 inner
。由于 inner
函数可以访问 outer
函数中的变量 x
,所以当我们调用 fn
函数时,它会输出 10
。
这是因为当 inner
函数在闭包中被调用时,它会先在自己本身的作用域中查找变量 x
,但是由于它并没有定义变量 x
,所以它会往上一级的作用域中进行查找,最终在 outer
函数的作用域中找到了变量 x
,并输出了它的值。
因此,闭包中的词法作用域是通过向上查找作用域链实现的。