debounce.js 1.3 KB

123456789101112131415161718192021
  1. /**
  2. * @desc 函数防抖
  3. * 与throttle不同的是,debounce保证一个函数在多少毫秒内不再被触发,只会执行一次,
  4. * 要么在第一次调用return的防抖函数时执行,要么在延迟指定毫秒后调用。
  5. * @example 适用场景:如在线编辑的自动存储防抖。
  6. * @param {Number} delay 0或者更大的毫秒数。 对于事件回调,大约100或250毫秒(或更高)的延迟是最有用的。
  7. * @param {Boolean} atBegin 可选,默认为false。
  8. * 如果`atBegin`为false或未传入,回调函数则在第一次调用return的防抖函数后延迟指定毫秒调用。
  9. 如果`atBegin`为true,回调函数则在第一次调用return的防抖函数时直接执行
  10. * @param {Function} callback 延迟毫秒后执行的函数。`this`上下文和所有参数都是按原样传递的,
  11. * 执行去抖动功能时,,调用`callback`。
  12. *
  13. * @return {Function} 新的防抖函数。
  14. */
  15. var throttle = require('./throttle');
  16. function debounce(delay, atBegin, callback) {
  17. return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);
  18. };
  19. module.exports = debounce;