/**
* Функция не дает вызвать функцию больше чем timesPerSecond в секунду
*
* @param {Function} fn функция которая будет вызываться
* @param {Number} timesPerSecond количество выполнений в секунду
* @return {Function} возвращает ссылку на функцию обертку
*/
function foo( fn, timesPerSecond ) {
var oldStart = 0;
return function() {
var newStart = ( new Date() ).getTime();
if ( newStart - oldStart < 1000 / ( timesPerSecond || 1 ) ) {
return;
}
oldStart = newStart;
return fn.apply( this, arguments );
}
}
// Пример использования
// функция будет вызвана не чаще чем 2 раза в секунду
document.addEventListener( "click", foo(function( e ){
console.log( "click to: " + e.target.nodeName );
}, 2 ), false );