概念:闭包就是能够读取其他函数内部变量的函数。
三大特性:
优点:
缺点:
解决: 将函数设置为 Null
补充
补充:闭包(closure)= 函数 + 函数能够访问的外部变量(自由变量)。当函数引用了它词法作用域之外的变量,且该函数在其定义的作用域之外被调用时,就形成了闭包。
优点:
- 延长局部变量的生命周期,可在函数外读取/修改函数内部变量;
- 用于封装私有变量(模块化早期方案 IIFE);
- 偏函数、柯里化、防抖节流等函数式编程都依赖闭包。
缺点:
- 被引用的变量会常驻内存,不会被 GC 回收,滥用会导致内存泄漏;
- 闭包共享同一个外部变量时,所有调用看到的都是同一个值,容易出错(用 IIFE / block scope 解决)。
释放:将引用闭包的变量置为
null,让 GC 可以回收;或在页面销毁时(组件 unmount 时)统一清理。
function counter() {
let n = 0
return function () {
return ++n
}
}
const inc = counter()
inc() // 1
inc() // 2
来源整理自:vue3js.cn 面试官系列



