#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);