Functions, Scope & Object Model
Memory, References & Garbage Collection
JavaScript automatically frees values that are no longer reachable, but automatic garbage collection does not prevent leaks. A leak is unneeded data that remains reachable.
- Reachability determines collection
- References make mutation visible
- Closures can keep data alive
- Caches need eviction
- Event listeners need cleanup
const cache = new Map()
function remember(key, value) {
cache.set(key, value)
}
// Unless entries are removed, this grows for the lifetime of the process/page.| Source | Why it leaks | Mitigation |
|---|---|---|
| Global Map cache | Entries never removed | TTL/size limit/clear |
| Event listener | Callback retained | remove listener / abort signal |
| Timer/interval | Callback retained | clear timeout/interval |
| Closure | Captures large object | Capture less / cleanup |
| Detached DOM | JS still references node | Release references |