函数是可复用的行为单元。作用域决定“能看见哪些变量”;闭包则是函数带着创建它的环境一起离开。
图:内部函数仍可访问外层作用域中的 count
闭包小例子
function makeCounter() {
let count = 0;
return function () {
count += 1;
return count;
};
}
const next = makeCounter();
next(); // 1
next(); // 2
count 没有暴露给外部,却被返回的函数持续使用——这就是闭包的实用形态:封装状态。
注意点
- 在循环里用
var绑定事件,容易共享同一个变量;改用let或单独工厂函数。 - 闭包持有大对象时,记得及时解除引用,避免内存常驻。