Debouncing

Debouncing - это обертка для любой функции, вызовы которой должны происходить только после заданного периода с момента последнего обращения к debouncing. Например debouncing(todo, 1000) должно запускать функцию todo по истечении 1000 миллисекунд с момента последнего вызова debouncing. Но с важной особенностью:

Если запрос на выполнение функции (todo) поступают чаще, чем раз в период (1000), то последний запрос перезаписывает предыдущий. Т.е. актуальным всегда остается только один запрос, котоый в итоге и будет выполнен.

PS - подобная обертка для функции является паттерном "Декоратор". См. паттерны в программировании

Пример debouncing в библиотеке lodash

HTML
<script 
    src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js">
<script>
JS
function updateData () { ...}                
window.addEventListener('scroll', _.debounce(updateData, 100))  
            

Demo

Default: window.pageYOffset =
Debounce: window.pageYOffset =
debouncing