function debounce(fn, delay) { let timeout = null; return function() { const ctx = this; const args = arguments; if (timeout) { clearTimeout(timeout); } timeout = setTimeout(() => { fn.apply(ctx, args); }, delay); } } function k() { console.log(1); } var delayedK = debounce(k, 1000); delayedK(); delayedK(); delayedK(); delayedK(); delayedK(); delayedK(); delayedK(); delayedK();