防抖和节流
在开发中我们经常会遇见一些频繁触发的事件,比如resize、scroll、mousemove等。那如果这些事件是复杂的回调函数或是数据请求,连续的被触发之后,浏览器反应不过来,就会出现卡顿的现象,为了解决这个问题,就出现了两种解决方案:防抖(debounce)和 节流(throttle) 防抖(debounce) 原理:触发高频事件后n秒内,函数只会执行一次,如果在一个事件触发的n秒内再次触发这个事件,那会以新的触发时间重新计算。总之,就是在触发完事件的n秒内不再触发事件,才会再执行函数。 实现: function debounce(fn, wait) { var timer = null; return function () { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, arguments); }, wait); } } 若想立即执行并在n秒内取消 debounce 函数的做法(immediate参数判断是否是立刻执行) function debounce(fn, wait, immediate) { var timer, result; var debounced = function () { if (timer) clearTimeout(timer); if (immediate) {