我试图在JavaScript中禁用一个函数,这样它每300ms只能被调用一次。
要做到这一点,我猜想最好的办法就是这样做:
var locked = (function () {
var lock = null;
return function () {
if (lock != null)
return false;
lock = setTimeout(function () {
lock = null;
}, 300);
return true;
};
})();
在其他函数中使用此锁:
function superImportantFunction() {
if(locked()) return;
}
现在,由于某些原因,这不起作用。您有任何更好的建议或可能是代码不起作用的原因吗?
谢谢!
答案 0 :(得分:1)
它怎么行不通?似乎为我工作。虽然您可能需要为不同的函数创建单独的锁,除非您希望它们共享锁。你需要扭转你的回报值。
var lockF = function () {
var lock = null;
return function () {
if (lock != null)
return true;
lock = setTimeout(function () {
lock = null;
}, 300);
return false;
};
};
var func1locked = lockF();
var func2locked = lockF();
答案 1 :(得分:0)
在
var lock = null;
return function () {
if (lock != null)
return false;
您将lock设置为null,然后检查lock是否不等于null。也就是说,返回函数将始终返回false。
尝试将锁定声明移出Locked()函数:
var lock = null;
var locked = (function () {
return function () {
if (lock != null)
return false;
lock = setTimeout(function () {
lock = null;
}, 300);
return true;
};
})();