В чем разница между Listener и Observer

«В чем разница между Listener и Observer» — вопрос из категории Паттерны, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Listener и Observer оба используются для реагирования на события, но есть ключевые различия:

  1. Связь с источником:

    • Listener обычно привязан к конкретному событию (например, click).
    • Observer может следить за изменениями состояния объекта.
  2. Количество событий:

    • Listener обрабатывает одно событие.
    • Observer может отслеживать несколько изменений.
  3. Примеры:
// Listener (Event Listener)
button.addEventListener('click', () => console.log('Clicked!'));

// Observer (IntersectionObserver)
const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => console.log(entry.isIntersecting));
});
observer.observe(element);
  1. Паттерны:
    • Listener - часть Event-Driven подхода.
    • Observer реализует паттерн Observer (издатель-подписчик).

Listener'ы проще, Observer'ы мощнее и гибче для сложных сценариев.