1.作为参数传给其他函数,如回调函数
function add(a,b,fn){
return fn(a)+fn(b);
};
add(1,2,x=>x*2); //6
2.作为函数返回值
function mul(a,b){
let result=a*b;
return function(){
result+=1;
return result;
}
}
var a=mul(2,3);
a(); //7
3.函数柯里化
4.节流函数setTimeout()
5.分时函数
function timeChunk(arr,count,fn){
function select(){
for(let i=0,len=arr.length;i<Math.min(count||1,len);i++){ //i小于count、arr.length中较小的一个
let el=arr.shift();
fn(el); //将被删除的元素当作参数传入fn中
}
};
return function(){
let timer=setInterval(function(){
if(arr.length===0){
clearInterval(timer);
}
select();
},1000)
}
};
const arr=[];
for(let i=0;i<10;i++){
arr.push(i);
}
var renderList=timeChunk(arr,2,function(el){
let div=document.createElement('div');
div.innerHTML=el;
document.body.appendChild(div);
});
renderList();
6.惰性函数,判断后直接重写函数,免去每次调用都需要判断
var addEvent=function(el,type,fn){
if(window.addEventListener){
addEvent=function(el,type,fn){
el.addEventListener(type,fn,false);
}
}else if(window.attchEvent){
addEvent=function(el,type,fn){
el.attchEvent('on'+type,fn);
}
}
addEvent(el,type,fn);
}
var div=document.getElementById('div1');
addEvent(div,'click',()=>alert(1));