Я пытаюсь отключить функцию в JavaScript, чтобы ее можно было вызывать только раз в 300 мс.

Я подумал, что для этого лучше всего было бы сделать что-то вроде этого:

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
Mickel 10 Сен 2010 в 18:15

2 ответа

Лучший ответ

Как это не работает? Кажется, у меня работает. Хотя вам, вероятно, потребуется создать отдельные блокировки для разных функций, если вы не хотите, чтобы они разделяли блокировку. И вам нужно отменить возвращаемые значения.

Изменить, изменив логическое значение

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
Community 20 Июн 2020 в 09:12

В

var lock = null;
return function () {
    if (lock != null)
        return false;

Вы устанавливаете блокировку в значение null, а затем проверяете, не равна ли блокировка нулю. То есть ваша функция возврата всегда будет возвращать false.

Попробуйте переместить объявление блокировки из функции Locked ():

var lock = null;
var locked = (function () {    
return function () {
    if (lock != null)
        return false;

    lock = setTimeout(function () {
        lock = null;
    }, 300);
    return true;
};
})();
0
JoshNaro 10 Сен 2010 в 15:04