闭包不是包子:JavaScript 里那个能记住事儿的小盒子

闭包不是包子: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 回调、还有面试官的微笑。

闭包也不是包子,不能吃,但比包子香多了。

comments powered by Disqus