函数与作用域 —— 闭包到底是什么鬼

📅 2026/7/9 19:05:28 👁️ 阅读次数 📝 编程学习
函数与作用域 —— 闭包到底是什么鬼
学到函数和作用域的时候,闭包成了我第一个真正意义上的 "拦路虎"。看了好几篇教程,还是似懂非懂。
先从基础说起。JS 里函数是一等公民,可以赋值给变量,可以当参数传递,也可以作为返回值。作用域分全局作用域、函数作用域和块级作用域,内部作用域可以访问外部作用域的变量,反过来不行。
闭包的概念其实就是:函数能够记住并访问它的词法作用域,即使函数在当前词法作用域之外执行。说人话就是,内部函数被拿到外面调用,依然能访问原外层函数里的变量。
我用计数器的例子终于搞懂了:
javascript
运行
function createCounter() {let count = 0; // 外层函数的局部变量return function() {count++;console.log(count);};
}const counter = createCounter();
counter(); // 1
counter(); // 2
counter(); // 3
外层函数定义一个计数变量,返回一个内部函数,每次调用内部函数就让计数加一。这样变量被 "保护" 起来了,不会被外界污染,同时还能保持状态。
闭包的应用场景很多,比如防抖节流、函数柯里化、模块化封装等等。虽然现在我还不能运用自如,但至少不再害怕这个概念了。很多难理解的知识点,多写几个例子跑一跑,慢慢就开窍了。