闭包不是包子:JavaScript 里那个能记住事儿的小盒子
每个 JS 初学者学到闭包时都会灵魂三问:闭包是啥?闭包有啥用?闭包能吃吗?(不能,它不是包子)。
闭包就是一个“能记住事儿的小盒子”。函数执行完了,但它记得的变量还在。
function makeCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const c = makeCounter();
console.log(c()); // 1
console.log(c()); // 2像把钱包放在锁的盒子里,把钥匙给朋友。你走远了,但朋友每次打开都能看到钱。
用途:数据私有化(防同事瞎改)、函数工厂、防抖节流。
function createBank(init) {
let b = init;
return {
withdraw: function(a) {
if (a <= b){ b-=a; return a; }
return "余额不足,穷鬼!";
},
check: function() { return b; }
};
}
// b 变量对外不可见!理解了闭包就理解了 React Hooks、Node.js 回调、还有面试官的微笑。
闭包也不是包子,不能吃,但比包子香多了。