La délégation d'événements place un seul écouteur sur un élément parent plutôt qu'un par enfant, en exploitant le bouillonnement et event.target pour savoir quel enfant est concerné. Elle économise des écouteurs et fonctionne aussi pour les éléments ajoutés plus tard.
Exemple
liste.addEventListener('click', (e) => {
const li = e.target.closest('li')
if (li) li.classList.toggle('fait')
})