Насколько мне известно, любой ответ, который может быть опубликован здесь, может иметь неожиданные побочные эффекты.
В среде, совместимой с ES2015, вы можете избежать любых побочных эффектов, используя WeakMap .
const id = (() => {
let currentId = 0;
const map = new WeakMap();
return (object) => {
if (!map.has(object)) {
map.set(object, ++currentId);
}
return map.get(object);
};
})();
id({}); //=> 1