1.防抖动
停止抖动,保证执行一次
// 防抖动
function a(fn, wait){let t = null;return function () {if (t !== null) clearTimeout(t);// 下面在执行的时候等待1000s的时候 会将这个自动去除t = setTimeout(fn, wait);}}// fn是函数 wait是延迟执行的时间
这里就达到了效果,当用户停止点击或者移动的时候,这个才会执行一次
2.节流
节流的话是保持抖动的过程中,以一定时间延迟来执行函数运行
两种方式来处理:时间戳、定时器
// 节流 一种是时间戳 也就是现在这样 一种是定时器
function a(fn, delay){let b = Date.now(); // 闭包中父函数的变量一直存在,也就是说b是一直存在着的 所以后面的覆盖才显得尤为重要return function () {let c = Date.now();if (c-b>= delay) {fn();//fn.apply(this,arguments);b = Date.now(); // 上一次结束的时间}}}
补充:这里描述一下函数的闭包行为,函数内父函数会将父函数的变量一直保存在内存当中,因为不知道子函数到底引用了没有,这是js特有的闭包行为。