// Debounce is a higher order function which makes its enclosed function be executed // only if the function wasn't called again till 'delay' time has passed, this helps reduce impact of heavy working // functions which might be called frequently // NOTE : Don't use lambda functions as this doesn't get bound properly in them, use the 'function (args) {}' format const debounce = (func, delay) => { let inDebounce; return function() { const context = this; const args = arguments; clearTimeout(inDebounce); inDebounce = setTimeout(() => func.apply(context, args), delay); }; }; export default debounce;