.clearTimeout() | JavaScript 日本語リファレンス | js STUDIO に記載されてる通りなんですけど、実装時にちょっとハマったので備忘録。
// timer起動
const timer = setTimeout(() => { /* hogehoge */ }, "1000");
timer();
// timer解除
clearTimeout(timer);
これでsetTimeoutで設定したTimerを解除できるものかと思っていましたが、 timer() とした時点で timeoutIDを返り値に取らなくなってしまい、clearTimeout をしても解除できません。
(Frontend力のなさを痛感しました。。。)
SetTimeoutは変数の中に定義した時点で実行されてTimer登録されます。そのため
const timer = setTimeout(() => { /* hogehoge */ }, "1000");
この時点でsetTimeoutは実行されてTimerがセットされます。
SetTimeout は返り値に timeoutID が入ってくるので、SetTimeout を解除する clearTimeout(timeoutID) の引数にはTimerを設定した時の返り値の timeoutID を指定することでTimerを解除することができます。