Javascript写一个once函数,让传入函数只执行一次

functionfn(){
console.log("xxx");
}
functiononce(fn){
}
once(fn);//xxx
once(fn);//没了
料青山看我应如是
浏览 1508回答 2
2回答

慕码人2483693

刚开始以为楼主需要的是这个一个只执行一次的函数functiononce(func){varran,result;if(!isFunction(func)){thrownewTypeError(funcErrorText);}returnfunction(){if(ran){returnresult;}ran=true;result=func.apply(this,arguments);//clearthe`func`variablesothefunctionmaybegarbagecollectedfunc=null;returnresult;};}functiontest(){alert('coinxu')}varnewTest=once(test)newTest()newTest()copyfromlodash.once不过还是给出你的答案functiontest(){alert('coinxu')}varonce=(function(){varmemo={},i=0;returnfunction(fn){for(varkeyinmemo){//匿名函数支持if(memo[key].func===fn||memo[key].func.toString()===fn.toString()){returnmemo[key].result}}i+=1varresult=fn()memo[i]={func:fn,result:result}returnresult}})()once(test)once(test)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript