Votre fonction telle que définie retournera toujours false
car la variable last
n'est jamais enregistrée nulle part. Vous pouvez le maintenir comme une propriété d'un objet, ou vous pouvez le maintenir dans une fermeture.
Voici un exemple de fermeture:
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;
})());
qui utilise une fonction de cadrage anonyme pour construire votre fonction timechill
comme une fermeture sur la variable last
. La fonction de portée anonyme renvoie une référence à la fonction timechill
, qui est affectée à timething.timechill
. Rien d'autre que la fonction timechill
peut accéder à last
, c'est entièrement privé.
(je suis sûr que la logique réelle de la fonction pourrait être refactorisé un peu, mais je pense que c'est assez proche de l'original, sauf qu'il y avait un endroit où vous reveniez true
où je pense que vous vouliez false
.)
Que ce soit une bonne idée dépend entièrement de votre cas d'utilisation. Je ne serais pas occupé-boucle sur ce qui précède. :-) Mais si vous l'utilisez pour faire apparaître quelque chose comme "Vous ne pouvez évaluer un commentaire qu'une fois toutes les cinq secondes", ce serait bien, même si dans ce cas je le généraliserais probablement.
Si c'est un copier coller de votre code, je vous conseille de ne pas oublier de mettre le ';' sur votre vrai code – fmsf
Merci pour toutes les bonnes réponses! Je serai un meilleur programmeur js quand je l'aurai enveloppé dans ma tête. La première fois que j'utilise ce site en passant. – heorling