この問題のメカニズムはよくわかりませんが、clearTimeout を使用して簡単にキャンセルできる変数 ID に setTimeout を 1 つ設定しようとしています。ただし、setTimeout が clearTimeout の前に 2 回トリガーされると、おかしなことになります。
例: http://www.w3schools.com/js/tryit.asp?filename=tryjs_settimeout2
[Try It] を 2 回クリックしてから [Stop the Alert] を 2 回クリックしても、設定されたタイムアウトの機能が引き続き呼び出されます。同様に、イベントが上書きされる変数に保存されていることを考えると、Try It が関数を 2 回トリガーする理由がわかりません。
ここで何が起こっているのか分かりますか?