---
date: 2020-10-12
id: e06279b3-4488-40b1-b822-fca19b47089a
title: JavaScript WeakMaps
---

# Introduction

A WeakMap is a [Map](20201012093745-javascript_maps) that doesn’t
prevent its keys from being garbage-collected. That means that you can
associate data with [objects](20200826201605-objects) without having to
worry about memory leaks.

# Example

``` javascript
//----- Manage listeners

const _objToListeners = new WeakMap();

function addListener(obj, listener) {
    if (! _objToListeners.has(obj)) {
        _objToListeners.set(obj, new Set());
    }
    _objToListeners.get(obj).add(listener);
}

function triggerListeners(obj) {
    const listeners = _objToListeners.get(obj);
    if (listeners) {
        for (const listener of listeners) {
            listener();
        }
    }
}

//----- Example: attach listeners to an object

const obj = {};
addListener(obj, () => console.log('hello'));
addListener(obj, () => console.log('world'));

//----- Example: trigger listeners

triggerListeners(obj);
```
