What is the event emitter pattern in JavaScript?
Answer
The Event Emitter (Pub/Sub) pattern decouples producers from consumers — emitters broadcast events without knowing who is listening; subscribers listen without knowing who emitted. In Node.js: const EventEmitter = require("events"); class Store extends EventEmitter { setData(data) { this.data = data; this.emit("change", data); } }. In browsers: DOM events follow this pattern. Custom implementation: class EventEmitter { constructor() { this.events = {}; } on(event, cb) { (this.events[event] ??= []).push(cb); return this; } emit(event, ...args) { (this.events[event] || []).forEach(cb => cb(...args)); } off(event, cb) { this.events[event] = (this.events[event] || []).filter(fn => fn !== cb); } once(event, cb) { const wrapper = (...args) => { cb(...args); this.off(event, wrapper); }; this.on(event, wrapper); } }. React's state management libraries (Redux, Zustand), Vue's reactivity, and RxJS all build on this pattern. Always remove listeners when components unmount to prevent memory leaks.
Previous
What is the JavaScript module bundler ecosystem?
Next
What is JavaScript performance optimization?