Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。1,706件3タイマーをjsで作る際に下記のように再帰呼び出しで作ることがよくあると思います。この処理がうまくいくことが疑問です。clearTimeout(timerId);}変数timerIdに入ったタイマーIDを引数にclearTimeoutをしているのでタイマーが止まる仕組みなのはわかるのですが、再帰呼び出しで無限ループしていると=の右の処理が終了していないので代入は行われないのではないでしょうか?どのタイミングで変数timerIdに値が入っているのか不明です。ご存知の方教えてください。票1代入の時点では再帰呼び出し(?)は起こっていなくて、単に関数式として保持されるだけ(指定時間経過後に呼び出されて実行される)なので、呼び出す処理が終わっていなくても代入を完了できます。関数式は引数として渡された時に実行されてその結果に置き換えられるのではなくて単に関数オブジェクトなので、これを再帰呼び出しというかは疑問に思います。}/*※同時には積まれない。次の(つまり未来の)やつのつもり*/,...]//キューのつもりのように並びで格納されて先から呼び出されて消費される。いうようなイメージで実行されるかと思います。個の銅バッジ質問に関係無いコメントですが、繰り返しの呼び出しにはsetIntervalを使うのがいいと思います。|1一番分かりやすいのは、ブラウザで実際にsetTimeout関数を実行してみることです。Chromeのコンソールなどで以下のコードを実行してみてください。1000)実行直後に表示される数値がsetTimeout関数の戻り値であるtimeoutIDです。その1秒後に、コンソール上に「done」と表示されるはずです。javascriptの関数は第1級オブジェクトと呼ばれ、変数に代入したり、関数の引数や戻り値にしたりできます。setTimeout関数の第1引数は関数です。例のソースでは、その場で無名関数を定義をし引数として渡しているので、慣れないうちはややこしく感じるかもしれません。以下のソースを見れば理解しやすいかと思います。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。