闭包指「函数 + 它声明时所在的作用域」。当内部函数被返回到外层作用域之外执行时,它依然能访问创建时的变量——这些变量被「关」在了函数里,不会随外层函数执行结束而销毁。
闭包是 JS 最强大的特性之一:模块封装(私有变量)、函数工厂、计数器、缓存都靠它。代价是内存——被闭包引用的变量不会回收,所以别在闭包里无意识囤积大对象。
function counter() { let n = 0; // 被闭包保留的私有变量 return () => ++n; } const c = counter(); c(); c(); // 2,n 跨调用保持 // 模块模式:私有 API key function createSdk(key) { return { call: () => fetch(url, { headers: { key } }) }; }