function once(fn){//fn只需要被执行一次的函数
//hasRun:记录函数是否被执行过
let hasRun = false;
return (...args)=>{
if(!hasRun){//如果函数从来没有被执行过,则执行传入的函数fn,并且将hasRun设置为true,以后不再执行这个函数
hasRun = true;
fn.call(null, ...args);//执行函数fn,并传入执行时的参数...args
// console.log('args: ', ...args);
}
};
}
function log(params){
console.log('log times:', params);
}
let f = once(log);
f(1);
f(2);
f(3);
f(4);
效果图如下: