节流函数

  1. /**
  2. * @param {Function} fn 函数
  3. * @param {Number} time 时间
  4. */
  5. function throttle(fn, time) {
  6. let previous = 0
  7. return function() {
  8. const now = Date.now()
  9. const that = this
  10. const args = arguments
  11. if (now - previous > time) {
  12. fn.apply(that, args)
  13. previous = now
  14. }
  15. }
  16. }

防抖函数

  1. /**
  2. * @param {Function} fn 函数
  3. * @param {Number} time 延迟执行毫秒数
  4. * @param {Boolean} immediate true - 立即执行 false - 延迟执行
  5. */
  6. function debounce(fn, time = 1000, immediate = true) {
  7. let timer
  8. return function() {
  9. const that = this
  10. const args = arguments
  11. if (timer) {
  12. return clearTimeout(timer)
  13. }
  14. if (immediate) {
  15. const callNow = !timer
  16. timer = setTimeout(() => {
  17. timer = null
  18. }, time)
  19. if (callNow) {
  20. fn.apply(that, args)
  21. }
  22. } else {
  23. timer = setTimeout(() => {
  24. fn.apply(that, args)
  25. }, time)
  26. }
  27. }
  28. }