闭包
我们先来看一个简单的例子:
1 | function outerFunction() { |
在这个例子中,有两个函数:outerFunction 和 innerFunction。innerFunction 是在 outerFunction 里面定义的。当我们调用 outerFunction 时,它返回 innerFunction,并且 innerFunction 记住了 outerVariable 的值。
详细解释
定义外部函数(outerFunction):
1
2function outerFunction() {
var outerVariable = "我是外部变量";这里我们定义了一个外部函数,里面有一个变量
outerVariable。定义内部函数(innerFunction):
1
2
3function innerFunction() {
console.log(outerVariable); // 这里可以访问 outerVariable
}在
outerFunction里面,我们又定义了一个内部函数innerFunction,它可以访问并打印outerVariable。返回内部函数:
1
2return innerFunction;
}outerFunction返回innerFunction,让我们可以在外部调用它。调用外部函数并保存返回的内部函数:
1
var myClosure = outerFunction();
我们调用
outerFunction,并把返回的innerFunction保存到变量myClosure中。调用闭包函数:
1
myClosure(); // 输出 "我是外部变量"
最后,我们调用
myClosure,它实际上就是innerFunction,所以会输出outerVariable的值——“我是外部变量”。
为什么有用?
闭包非常有用,因为它可以让我们创建私有变量和函数。举个例子:
1 | function createCounter() { |
在这个例子中,count 是 createCounter 函数中的一个变量,但是通过闭包,我们可以在外部访问并修改 count 的值,而不直接暴露 count。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 longtian博客!


