怎么用ts写节流和防抖啊?

我之前的代码里面有节流和防抖的代码,但这是js版的,改ts的时候,没改明白(第一次写ts),希望得到大家的帮助。
原js代码如下:

/*函数节流*/
function throttle(fn, interval) {
  var enterTime = 0; //触发的时间
  var gapTime = interval || 300; //间隔时间,如果interval不传,则默认300ms
  return function () {
    var context = this;
    var backTime = new Date(); //第一次函数return即触发的时间
    if (backTime - enterTime > gapTime) {
      fn.call(context, arguments);
      enterTime = backTime; //赋值给第一次触发的时间,这样就保存了第二次触发的时间
    }
  };
}

/*函数防抖*/
function debounce(fn, interval) {
  var timer;
  var gapTime = interval || 1000; //间隔时间,如果interval不传,则默认1000ms
  return function () {
    clearTimeout(timer);
    var context = this;
    var args = arguments; //保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
    timer = setTimeout(function () {
      fn.call(context, args);
    }, gapTime);
  };
}
阅读 4k
1 个回答

节流:

function throttle(fn:(...arg:any[]) => any, interval:number = 300) {
  let lock = false;
  return function (this:unknown, ...args:any[]){
    if(lock) return;
    lock = true;
    setTimeout(() => lock = false, interval);
    fn.bind(this)(...args);
  }
}

防抖:

function debounce(fn:(...arg:any[]) => any, duration:number = 300) {
    let timer = -1;
    return function (this:unknown, ...args:any[]) {
      if(timer > -1){
          clearTimeout(timer);
      }
      timer = window.setTimeout(() => {
          fn.bind(this)(...args);
          timer = -1;
      }, duration);
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题