柯里化的作用
1.参数复用
function uri(prefix:string):any{
return function (site:string,url:string){
return `${prefix}${site}${url}`
}
}
const uri1 = uri('https://');
console.log(uri1('www.baidu.com','/search'))
console.log(uri1('www.bilibili.com','/user'))
console.log(uri1('www.google.com','/email'))
2.兼容性检测
(function whichEvent(){
if(window.addEventListener){
return function (element,type,listener,useCapture){
element.addEventListener(type,(e)=>{
listener.call(element,e);
},useCapture)
}
}else if(window.attachEvent){
return function (element,type,handle){
element.attachEvent('on'+type,(e)=>{
handle.call(element,e);
})
}
}
})()
3.延迟处理(面试常考)
let add = (...rest)=>{
let args = rest;
let inner = (...innerRest) => {
args.push(...innerRest)
return inner
}
inner.toString = ()=>{
return args.reduce((prev,cur)=>{
return prev + cur
},0)
}
return inner
}
console.dir(+add(1)(2)(3));
console.dir(+add(1,2,3)(4));
console.dir(+add(1)(2)(3)(4)(6));