一、防抖

1.1、原理

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时

1.2、适用场景

1.2.1、按钮提交场景

防止多次提交按钮,只执行最后一次提交

1.2.2、搜索框联想

防止联想发送请求,只发送最后一次输入

1.3、实现

  1. function debounce(func,wait){
  2. let timeout
  3. return function (){
  4. const context = this
  5. const args = arguments
  6. clearTimeout(timeout)
  7. timeout = setTimeout(function(){
  8. func.apply(context,args)
  9. },wait)
  10. }
  11. }

二、节流

2.1、原理

规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效

2.2、适用场景

2.2.1、拖拽场景

固定时间内只执行一次,防止超高频次触发位置变动

2.2.2、缩放场景

监控浏览器resize

2.3、实现

  1. function throttle(func,wait){
  2. let context,args
  3. let previous = 0
  4. return function (){
  5. let now = +new Date()
  6. context = this
  7. args = arguments
  8. if(now - previous > wait){
  9. func.apply(context,args);
  10. previous = now
  11. }
  12. }
  13. }