Skip to content

节流:每隔一段时间,只执行一次函数

冷却时间内无法在释放

// 节流(一段时间执行一次之后,就不执行第二次)
function throttle(fn, delay){
  let canUse = true
  return function(){
    if(canUse){
      fn.apply(this, arguments)
      canUse = false
      setTimeout(()=>canUse = true, delay)
    }
  }
}

const throttled = throttle(()=>console.log('hi'))
throttled()
throttled()

防抖,事件被触发n秒后,n秒内又被触发,则重新计时。

带着一起做

// 防抖(一段时间会等,然后带着一起做了)
function debounce(fn, delay){
  let timerId = null
  return function(){
    const context = this
    if(timerId){window.clearTimeout(timerId)}
    timerId = setTimeout(()=>{
      fn.apply(context, arguments)
      timerId = null
    },delay)
  }
}
const debounced = debounce(()=>console.log('hi'))
debounced()
debounced()