function once(func) {
var ran,
result;
if (!isFunction(func)) {
throw new TypeError(funcErrorText);
}
return function() {
if (ran) {
return result;
}
ran = true;
result = func.apply(this, arguments);
// clear the `func` variable so the function may be garbage collected
func = null;
return result;
};
}
function test(){
alert('coinxu')
}
var newTest = once(test)
newTest()
newTest()
copy from lodash.once
不过还是给出你的答案
function test(){
alert('coinxu')
}
var once = (function(){
var memo = {}, i = 0;
return function(fn){
for(var key in memo){
//匿名函数支持
if(memo[key].func === fn||memo[key].func.toString() ===fn.toString()){
return memo[key].result
}
}
i += 1
var result = fn()
memo[i] = {func:fn, result:result}
return result
}
})()
once(test)
once(test)
function test () {console.log('test')}
var once = function (fn) {
var isFirst = true;
return function () {
if (isFirst) {
isFirst = !isFirst;
fn();
}
};
};
var b = once(test);
b(); // 'test'
b(); // nothing
刚开始以为楼主需要的是这个
一个只执行一次的函数
copy from lodash.once
不过还是给出你的答案
http://underscorejs.org/docs/underscore.html#section-73
我也想了下,写了个比较二的函数:
缺点在于给函数创建了一个属性。。。
但是,我又不想把函数给毁灭掉,所以就这么干了。
不支持IE