function debounce(func, wait = 500) { let timeout; return function () { let context = this; let args = arguments; if (timeout) clearTimeout(timeout); timeout = setTimeout(() => { func.apply(context, args) }, wait); } } function throttle(func, wait = 1000) { let previous = 0; return function() { let context = this; let args = arguments; let now = Date.now(); if (now - previous > wait) { func.apply(context, args); previous = now; } } }