为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2019-03-29 22:09:08
functionfn(){console.log("xxx");}functiononce(fn){}once(fn);//xxxonce(fn);//没了
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

刚开始以为楼主需要的是这个
一个只执行一次的函数
functiononce(func){
varran,
result;
if(!isFunction(func)){
thrownewTypeError(funcErrorText);
}
returnfunction(){
if(ran){
returnresult;
}
ran=true;
result=func.apply(this,arguments);
//clearthe`func`variablesothefunctionmaybegarbagecollected
func=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+=1
varresult=fn()
memo[i]={func:fn,result:result}
returnresult
}
})()
once(test)
once(test)
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 1507 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信