Hint
Module pattern via IIFE: count and history are truly private. Only explicitly returned properties are public. Getter syntax (get log) is valid in object literals too.
const counter = (() => {
let count = 0;
const history = [];
return {
inc() { history.push(++count); return count; },
dec() { history.push(--count); return count; },
get log() { return [...history]; },
};
})();
counter.inc();
counter.inc();
counter.dec();
console.log(counter.inc());
console.log(counter.count);
console.log(counter.log.length);2 undefined 4
Explanation: inc: count becomes 1 (logged), 2 (logged). dec: count becomes 1 (logged). inc: count becomes 2 (logged), returns 2. counter.count: not exposed β undefined. counter.log getter returns [...history] β 4 entries.
Key Insight: Module pattern via IIFE: count and history are truly private. Only explicitly returned properties are public. Getter syntax (get log) is valid in object literals too.