上のソースコードは、グローバルスコープでiを宣言すると、2秒後にclearTimeoutによって処理が終了します。
しかし、下のソースコードのように、ローカルスコープ内でiを宣言するように変更すると、処理は止まらず延々と続きます。
なぜそのように処理に変化があるのか考えてみたのですが(下記に書いてあります)、それがあっているかどうか教えてください。もっと適切な考え方がある場合は教えていただけると助かります。
2秒後に止まるソースコード
JavaScript
1let i = 0; //iはここで宣言している 2 3 const showTime = () => { 4 console.log(new Date()); 5 let timerId = setTimeout(showTime, 1000); 6 i++; 7 if (i > 2) { 8 clearTimeout(timerId); 9 } 10 }; 11 12 showTime();
無限に続くソースコード
JavaScript
1const showTime = () => { 2 console.log(new Date()); 3 let timerId = setTimeout(showTime, 1000); 4 let i = 0; //iをここで宣言するように変更 5 i++; 6 if (i > 2) { 7 clearTimeout(timerId) 8 } 9}; 10 11showTime();
考えたこと
グロ-バルスコープで宣言した変数iはプログラム全体で使えるため、定数showTime実行にも適用される。一方、ローカルスコープで宣言した変数iはshowTimeの関数内のみであり、実行時には適用されない。つまり、showTimeを実行するときにif文が無視される、ということでしょうか?
回答2件
あなたの回答
tips
プレビュー