tl;dr: Avoid memory leaks by ensuring that if you register a callback to addEventListener you also unregister it with removeEventListener later on.

const handleVisibilityChange = (event) => {
  console.log(event);
};

document.addEventListener("visibilitychange", handleVisibilityChange);

// when you no longer need to subscribe to `visibilitychange`
document.removeEventListener("visibilitychange", handleVisibilityChange);