debounce.js 577 Bytes
/**
 * Created by TaoHuang on 2016/7/12.
 */

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);
        }
    };
}

module.exports = debounce;