- rename matches as matchesSelector (according to @brandonpayton advice)
- optimisation: event code shared across debounce and throttle (no code duplication)