JS 闭包的核心机制是什么?
- 核心特性:
- 核心背景:
- 自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方
- 闭包的应用场景:
- 私有变量(模拟封装)
function createCounter() { let count = 0 // 私有变量,外部无法直接访问 return { increment: () => ++count, decrement: () => --count, getCount: () => count, } } const counter = createCounter() console.log(counter.increment()) // 1 console.log(counter.increment()) // 2 console.log(counter.getCount()) // 2 console.log(counter.count) // undefined(外部无法直接访问) - 回调 & 事件监听
function addEventLogger(eventName) { return function () { console.log(`Event ${eventName} triggered!`) } } document.addEventListener('click', addEventLogger('click')) - 定时器 & 异步操作
function delayedGreeting(name) { setTimeout(() => { console.log(`Hello, ${name}!`) }, 2000) } delayedGreeting('Rain') // 2 秒后打印 "Hello, Rain!"
- 私有变量(模拟封装)
- 闭包的缺点:
- 可能导致内存泄漏
- 闭包会持有外部变量的引用,导致变量无法被垃圾回收
- 解决方案:手动将变量置为 null 或谨慎管理作用域 2. 滥用闭包可能影响性能
- 每次调用都会创建新的作用域,影响垃圾回收机制
- 适度使用,避免不必要的闭包