I timer, setTimeout() e setInterval() "impazziscono" se attivati ripetutamente mentre sono già in opera; ovvero, con setTimeout() lo puoi ancora fare se attendi la fine del singolo ciclo.

Debonsi ( ) resettare con clearTimeout() e clearInterval() prima di dare un nuovo avvio alla temporizzazione.

nomeTimer = setTimeout('myFunction(), 5);

clearTimeout(nomeTimer)


e vanno nominati, perché il clear possa individuarli.
Non si può però dare l' avvio a un clear per un timer che ancora non esiste, quindi o prima parte il timer comunque, oppure lo si dichiara come variabile globale nello script:

var nomeTimer;

e con questo, l' occorrenza di un clearTimeout() iniziale non produce più impedimento all' esecuzione dello script.