示例代码
function outer() {
let count = 0;
return () => {
count++;
return count;
};
}
const inner = outer();
console.log(inner());
console.log(inner());
原理解释
- 闭包:闭包是指函数能够记住并访问其词法作用域,即使函数在其词法作用域之外被调用。在上述代码中,
outer
函数返回了一个箭头函数。这个箭头函数虽然在 outer
函数外部被调用(inner
被定义在 outer
函数之外),但它仍然可以访问 outer
函数内部的变量 count
。这是因为箭头函数形成了一个闭包,保存了对 outer
函数作用域的引用。
- 箭头函数:箭头函数没有自己的
this
、arguments
、super
或 new.target
绑定。在闭包场景下,箭头函数的优势在于它简洁的语法,并且不会干扰闭包的作用域链。它直接从包含它的作用域(这里是 outer
函数的作用域)中获取变量,就像普通函数一样,但语法更简洁。每次调用 inner
,它都会访问并修改 outer
函数作用域中的 count
变量,这就是闭包与箭头函数结合的体现。