节流
trottle:在某段时间内,不论你触发了多少次回调,我都只认第一次,并在计时
完结时给予响应。所谓的“节流”,是通过在一段时间内忽视起初产生的回调申请来实现的.
防抖
debounce:在某段时间内,不论你触发了多少次回调,我都只认最初一次。工夫到了就执行回调。

存在的问题:
debounce 太有急躁了。如果用户的操作非常频繁,他每次都不等debounce 设置的 delay 工夫完结就进行下一次操作,于是每次 debounce 都为该用户从新生成定时器,回调函数被提早了成千上万次。频繁的提早会导致用户迟迟得不到响应,用户同样会产
生“这个页面卡死了”的观感。
心愿的后果:
如果delay 工夫内,我能够为你从新生成定时器;但只有delay的工夫到了,我必须
要给用户一个响应。

throttle(fn,delay){   let last =0;  // 上⼀次触发回调的工夫   let timer = null;    return ()=>{      let context = this;      let args = arguments;      let pre = Date.now();      // 判断上次触发的工夫和本次触发的时间差是否⼩于工夫距离的阈值      if(now -pre < delay){       //  如果工夫距离⼩于咱们设定的工夫距离阈值,则为本次触发操作设⽴⼀个新的定时器         clearTimeout(timer);         timer  = setTimeout(()=>{              last = now;              fn.apply(context,args);         },delay);      }else{      // 如果工夫距离超出了咱们设定的工夫距离阈值,那就不等了,⽆论如何要反馈给⽤户⼀次响应         last = now;         fn.apply(context,args);      }   }}const myscroll = throttle(()=>{console.log('scroll')},1000);