Storing a collection of unique functions

from jquery ninja book

by dandoyon

HTML

<ul id="results"></ul>

CSS

#results li.pass { color: green; }
#results li.fail { color: red; }

JavaScript

function assert(value, desc) {
    var li = document.createElement("li");
    li.className = value ? "pass" : "fail";
    li.appendChild(document.createTextNode(desc));
    document.getElementById("results").appendChild(li);
}

var store = {
    nextId: 1,
    cache: {},
    add: function(fn) {
        if (!fn.id) {
            fn.id = store.nextId++;
            return !!(store.cache[fn.id] = fn);
            // !! gets truthy/falsy value even from functions
        }
        return false; // was implicitly done in book
    }
};

function ninja() {}

assert(store.add(ninja), "Function was safely added.");
assert(!store.add(ninja), "But it was only added once.");