这个是在51js上面看到的一讨论,看到月影和客服果果的方法都利用的闭包来实现,实有独到之处,拎过来瞻仰一下
function once1(f) {
var run;
return function() {
if (!run) {
run = true;
f.apply(this, arguments);
}
}
}
//这个来自客服果果的方法
function once(fn){
return function(){
try{
fn.apply(this, arguments);
}catch(ex){
alert("'this function can only called by once.'");
}finally{
fn = null;
}
}
}
//这个来自己月影的方法
//月影果然有独到之处,实参做闭包,finally来清除fn...
调用:
var g = once(function(x) {
alert(x)
});
g(1);
g(2);
g(3);