Eu também não entendi o por quê de redefinir o cronômetro pra null. Mas pelo que entendi das minhas pesquisas nas documentações aí pela internet:
Quando a gente define o intervaloID = setInterval(func, time)
, a função setInterval retorna o id do intervalo, não o intervalo em si. E a clearInterval
vai lá e termina o intervalo com aquele id que foi passado pra ela.
Mas acontece que tem uma outra função chamada setTimeout(func, time)
. Enquanto a setInterval
executa func
continuamente a cada intervalo de tempo time
, a setTimeout
executa a func
somente uma vez quando depois de um intervalo de tempo time
.
O problema parece estar no fato dessas duas funções terem o mesmo conjunto de ids possíveis. Então, podedmos ter problemas caso estejamos lidando com multiplos intervalos e timeOuts.
Imaginemos que nós criamos um Timeout. timeoutID = setTimeout(func1, 1000)
. Depois de 1seg esse Timeout é executado. Nós finalizamos ele com clearTimeout(timeoutID)
, mas n'ao limpamos a variável timeoutID
. Mas pra frente, a gente cria um interval com intervaloID = setInterval(func, time)
. Mas como elas compartilham o mesmo conjunto de possíveis IDs, agora o timeoutID
tem o ID do intervalo e isso pode gerar problemas . Então parece que é uma boa prática zerar o ID quando acabar com o intervalo ou timeout.
Mas ainda tem algumas pessoas que podem argumentar que isso não é bom porque você tá mudando o tipo de uma variável que antes era número pra null, que é um objeto. Mas eu não tenho experiência pra argumentar :v
Por favor, algum tutor pode completar e me corrigir :)
Links:
https://stackoverflow.com/questions/40869259/is-it-necessary-to-set-the-id-of-setinterval-variable-to-null-after-clearinterva
https://developer.mozilla.org/en-US/docs/Web/API/setInterval
https://developer.mozilla.org/en-US/docs/Web/API/clearInterval
https://developer.mozilla.org/en-US/docs/Web/API/setTimeout
https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout