Ваша определенная функция всегда будет возвращать false
, потому что переменная last
никогда нигде не сохраняется. Вы можете хранить его как свойство объекта или хранить внутри замыкания.
Вот пример закрытия:
timething.timechill = (function() {
var last = 0;
function timechill() {
var now;
now = new Date().getTime();
if (last) {
if (now - last > 500) {
// It's been long enough, allow it and reset
last = now;
return true;
}
// Not long enough
return false;
}
// First call
last = now;
return false;
}
return timechill;
})());
Использует анонимную функцию определения объема для построения вашей функции timechill
как замыкания над переменной last
. Анонимная функция определения объема возвращает ссылку на функцию timechill
, которая присваивается timething.timechill
. Ничто, кроме функции timechill
, не может получить доступ к last
, оно полностью приватное.
(Я уверен, что реальная логика функции могла бы быть немного изменена, но я думаю, что это довольно близко к вашему оригиналу, за исключением одного места, куда вы возвращали true
, где, я думаю, вы хотели false
.)
Является ли это хорошей идеей, полностью зависит от вашего варианта использования. Я бы не стал зацикливаться на вышесказанном. :-) Но если вы используете его, чтобы вызвать что-то вроде SO, «Вы можете оценивать комментарий только каждые пять секунд», это было бы хорошо, хотя в этом случае я бы, вероятно, обобщил это.