| 123456789101112131415161718192021222324252627282930313233 | var now = require('../time/now');    /**     */    function throttle(fn, delay){        var context, timeout, result, args,            diff, prevCall = 0;        function delayed(){            prevCall = now();            timeout = null;            result = fn.apply(context, args);        }        function throttled(){            context = this;            args = arguments;            diff = delay - (now() - prevCall);            if (diff <= 0) {                clearTimeout(timeout);                delayed();            } else if (! timeout) {                timeout = setTimeout(delayed, diff);            }            return result;        }        throttled.cancel = function(){            clearTimeout(timeout);        };        return throttled;    }    module.exports = throttle;
 |