setTimeout, clearTimeout при закрытии

#javascript #actionscript-3 #actionscript

#javascript #actionscript-3 #actionscript

Вопрос:

 var clearId:int = setTimeout(function():void{
            //some code here
            clearTimeout(clearId);
        },2000);
  

Это допустимо КАК3? Кто-нибудь видит проблемы с этим?

Ответ №1:

Хотя это компилируется без предупреждений или ошибок и допустимо КАК 3, существует ненужный код.

Функция setTimeout запускает функцию только один раз.

С другой стороны, функция setInterval выполняет функцию с заданным интервалом до вызова clearInterval.

clearTimeout используется для остановки события тайм-аута, которое было установлено для возникновения. Поскольку тайм-аут возникает только один раз, нет необходимости очищать его в функции timeout. Если бы вы использовали setInterval, то вам нужно было бы clearInterval, когда вы больше не хотели, чтобы вызывалась функция.

Комментарии:

1. Требовалось бы вызывать clearTimeout, если бы setTimeout использовался с функцией вместо закрытия, например: setTimeout(someFunction, 2000);

2. Хм… «Функция setTimeout запускает функцию только один раз». Так что нет, это не потребуется, поскольку оно выполняется только один раз.

3. Значит, clearTimeout необходим только для остановки чего-либо до его запуска?

4. Точно — clearTimeout используется для остановки тайм-аута перед его запуском.

Ответ №2:

Это допустимо?ДА.
Работает ли это?ДА.
Имеет ли это какой-либо смысл?Нет.

Тайм-аут выполняется только один раз. Закрытие обязательно вызывается только после того, как тайм-аут уже завершен. Теперь, если бы вы использовали интервал, это имело бы смысл.

Метод работает, потому что компилятор заранее определяет все эти локальные переменные, делая их автоматически доступными. В принципе, это делает что-то вроде этого:

 var clearId:int;
clearId = setInterval(function():void
{
    clearInterval(clearId);
}, 2000);