function debounce()

in ArticleTemplates/assets/js/modules/util.js [74:102]


function debounce(func, wait, immediate) {
    let args;
    let callNow;
    let context;
    let later;
    let timeout;

    return function() {
        context = this;
        args = arguments;

        later = () => {
            timeout = null;
            if (!immediate) {
                func.apply(context, args);
            }
        }

        callNow = immediate && !timeout;

        clearTimeout(timeout);

        timeout = setTimeout(later, wait);

        if (callNow) {
            func.apply(context, args);
        }
    };
}