如何在JavaScript中暂时禁用某个功能?

时间:2010-09-10 14:15:02

标签: javascript

我试图在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;
}

现在,由于某些原因,这不起作用。您有任何更好的建议或可能是代码不起作用的原因吗?

谢谢!

2 个答案:

答案 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;
};
})();