ClearTimeout, если существует

timer_gear существуют только в том случае, если я нажимаю какую-либо кнопку (до 5 секунд). Но есть еще одна функция, которую можно вызвать в любое время. В этой функции я очищаю таймер и перезапускаю его. Но сначала я должен проверить, существует ли объект, иначе я получаю эту ошибку: Uncaught ReferenceError: timer_gear не определен

Не могли бы вы помочь мне решить эту проблему? Они не работают.

if(timer_gear!="undefined")clearTimeout(timer_gear);

if(timer_gear)clearTimeout(timer_gear);

EDIT1: сначала я опечатал свой вопрос: if (! timer = > if (timer EDIT2:

полный код:

function hide_gear(){
    $('#gear_div').animate({opacity: 0}, 1000);
    delete timer_gear; //EDIT3: destroy object
}

...

/*gear*/
$('#gear').click(function(){
    $('#gear_div').animate({
        opacity: 1,
      }, 1000, function() {
        timer_gear = setTimeout("hide_gear();",5000);
      });
});
$('#gear').mousemove(function(){
    if( ? ? ? )
    {
        clearTimeout(timer_gear);
        timer_gear = setTimeout("hide_gear();",5000);
    }

});

Результаты:

timer_gear// Uncaught ReferenceError timer_gear is not defined
timer_gear != undefined // Uncaught ReferenceError: timer_gear is not defined
typeof timer_gear !== "undefined" // WORKS
typeof timer_gear != "undefined" // WORKS, just tired it
var timer_gear; //at the begining - WORKS, but I did not wanted a new variable if its not necessary

Благодарим вас за ответы!

Ответ 1

Первый должен быть:

if(typeof timer_gear !== "undefined"){
  clearTimeout(timer_gear);
}

И второй, но это не сработает, если timer_gear не определено, , поэтому вы должны использовать typeof выше:

if(timer_gear){
  clearTimeout(timer_gear);
}

Ответ 2

Все, что вам нужно сделать, это объявить timer_gear. clearTimout здесь не проблема. Процитировать MDN; Передача недопустимого идентификатора на clearTimeout не имеет никакого эффекта (и не вызывает исключения). Поэтому просто добавьте следующее в начало своего кода:

var timer_gear;

Не нужно, чтобы все, если все остальные предлагали.

Ответ 3

Если вы хотите очистить таймер, удерживаемый в переменной timer_gear, если он существует, вы можете сделать

if (timer_gear) clearTimeout(timer_gear);

Ответ 4

Вам нужно другое условие для вашего if:

if (typeof(timer_gear) !== "undefined")

или просто:

if (timer_gear)

Ответ 5

Обычно это должно работать:

timer_gear = false;
if(timer_gear != false){
    clearTimeout(timer_gear);
}

Ответ 6

if(timer_gear)clearTimeout(timer_gear);

или

if(timer_gear != undefined)clearTimeout(timer_gear);