| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 
							- /**
 
-  * Throttle decorator
 
-  * @param {Function} fn
 
-  * @param {Number} freq
 
-  * @return {Function}
 
-  */
 
- function throttle(fn, freq) {
 
-   let timestamp = 0;
 
-   let threshold = 1000 / freq;
 
-   let lastArgs;
 
-   let timer;
 
-   const invoke = (args, now = Date.now()) => {
 
-     timestamp = now;
 
-     lastArgs = null;
 
-     if (timer) {
 
-       clearTimeout(timer);
 
-       timer = null;
 
-     }
 
-     fn.apply(null, args);
 
-   }
 
-   const throttled = (...args) => {
 
-     const now = Date.now();
 
-     const passed = now - timestamp;
 
-     if ( passed >= threshold) {
 
-       invoke(args, now);
 
-     } else {
 
-       lastArgs = args;
 
-       if (!timer) {
 
-         timer = setTimeout(() => {
 
-           timer = null;
 
-           invoke(lastArgs)
 
-         }, threshold - passed);
 
-       }
 
-     }
 
-   }
 
-   const flush = () => lastArgs && invoke(lastArgs);
 
-   return [throttled, flush];
 
- }
 
- export default throttle;
 
 
  |