代码者,哪怕是你自己写的,一段时间不去看它,也会忘到九霄云外
——鲁迅(bushi)
于是就产生了再写一遍,并时不时看两眼的想法
一、防抖与节流
防抖
给一个执行期限,如果在期限内,那就重置(reset)他的时间
即简单记忆为:防抖(debounce)——事件触发reset time
设置俩参数,方法和时间:
function debounce(fn, time){
let timer = null;
return function (){
clearTimeout(timer);
//触发了就休想逃
timer = setTimeout(()=>{fn.apply(this,arguments)},time);
}
function alert(){console.log('success')}
const ele = document.getElementByClassName('de')[0];
ele.addEventlistener('input',debounce(alert, 1000));
节流
很简单,想象成你打开水龙头放水,一定时间内只出规定的水量
function throttle(fn, time){
//思路是flag标志位不为true,就说明正在节流中
let flag = true;
return function(){
if(flag!==true) return ;
flag=false;
setTimeout(()=>{fn.apply(this,arguments);flag=true},time)
}
}
ES5数组去重
ES5没有set,使用的是数组遍历加是否存在值相同的key位
使用key=(typeof a)+a是合理的做法,如果仅仅用a的值来做key,无法防止类型转化等问题