节流:隔一段时间触发一次,场景页面滚动加载
function throttle(fn,wait){
let lastTime = 0;
return function (...args){
let now = new Date();
if(now-lastTime>wait){
lastTime=now;
fn.apply(this,args);
}
}
}
防抖:完成后再发送请求,最后一个人说了算,只认最后一次,搜索框搜索输入,手机号、邮箱验证输入检测
function debound(fn,wait){
let timer;
return function(...args){
if(timer) clearTimeout(timer);
timer = setTimeout(()=>{
fn.apply(this,args);
},wait)
}
}
函数柯里化:通过把一个多参函数转换成一系列嵌套的函数,每个函数一次接受一个参数。
let _fn = curry(function(a,b,c,d,e){
console.log(a + b + c + d + e)
});
_fn(1,2,3,4,5); //15
_fn(1)(2)(3,4,5); //15
_fn(1,2)(3,4)(5); //15
_fn(1)(2)(3)(4)(5); //15
function curry(fn,len=fn.length){
return _curry.call(this,fn,len);
}
function _curry(fn,len,...args){
return function (...params){
let _args=[...agrs,...params];
if(_args.length>len){
return fn.apply(this,_args);
}else{
return _curry(this,fn,len,..._args);
}
}
}