При использовании setTimeout нужно ли clearTimeout?

88

Кто-то сказал мне, что при использовании setTimeoutвы должны очистить его с помощью clearTimeout. Я могу понять до истечения таймаута, но почему после? Или это неправда?

ТуманностьФокс
источник

Ответы:

87

Это неправда - сбросить тайм-аут после его завершения не вредно, но в этом нет необходимости.

Согласно спецификации :

Если дескриптор не идентифицирует запись в списке активных таймеров объекта WindowOrWorkerGlobalScope, для которого был вызван [clearTimeout], метод ничего не делает.

Другими словами, это запретная операция; ничего не происходит, и никаких ошибок не возникает.

jmar777
источник
52

На самом деле вам не нужно его использовать clearTimeout, вы используете его только в том случае, если хотите отменить тайм-аут, который вы уже установили до того, как это произойдет.

Это, как правило , более практично использовать clearIntervalс , setIntervalпотому что setIntervalобычно работает на неопределенный срок.

Призрак Мадары
источник
16

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

gddc
источник
10

Нет причин очищать его после завершения. Возможно, ваш друг запутался setInterval.

Blazemonger
источник
10

Нет, setTimeoutперестает работать после 1 звонка. Однако, чтобы остановиться setInterval, вы должны использовать clearInterval. Если вы создадите бесконечный цикл, setTimeoutто clearTimeoutможно будет использовать.

Тревор
источник