function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; var logging = debounce(function(){ alert("Heavy task"); }, 5000);
<button onclick="setTimeout(logging, 100);">Execute Function After 100ms</button>