Как-то так, если я правильно понял.
Очень похоже на какой-то странный debouncing/throttling. Так зачем это?
function limited(time, func) {
if (typeof time === 'function') {
func = time;
time = 20;
}
var newThis = this;
var newArguments = arguments;
var timeElapsed = true;
return function () {
if (timeElapsed) {
timeElapsed = false;
setTimeout(function () {
timeElapsed = true; // сбрасываем по началу работы функции
func.apply(newThis, newArguments);
}, time);
} else {
newThis = this;
newArguments = arguments;
}
}
}