闭包是指在函数内部创建的一个函数,并且这个内部函数可以访问到外部函数的变量和参数。在 JavaScript 中,当一个函数内部嵌套另一个函数,并且内部函数引用了外部函数中的变量时,就会创建一个闭包。
以下是一个简单的示例来解释闭包的工作原理:
function outerFunction(x) {
// 外部函数
var innerFunction = function(y) {
// 内部函数
return x + y;
};
return innerFunction;
}
var innerFunction = outerFunction(2);
console.log(innerFunction(3)); // 输出 5
在这个示例中,outerFunction
接受一个参数x
,并返回一个内部函数innerFunction
。innerFunction
接受一个参数y
,并返回x + y
的值。
当我们调用outerFunction(2)
时,会创建一个闭包,将x
的值设置为 2,并返回innerFunction
。我们将这个返回的函数赋值给变量innerFunction
。
然后,我们调用innerFunction(3)
,由于innerFunction
是在闭包中创建的,它可以访问到外部函数outerFunction
中的变量x
,因此x
的值为 2。因此,innerFunction(3)
的结果为 2 + 3 = 5。
总之,闭包的工作原理是通过在函数内部创建一个可以访问到外部函数变量的内部函数,从而实现对变量的封装和保护。