for ループで setTimeout を使用した連続値の出力
setTimeout を使用して連続値を出力しようとしているときに問題が発生しました。 for ループ内で実行しますが、最後の値が 2 回出力されることになります。これは、変数 i を setTimeout 関数内で直接使用すると、その値が関数の実行までに更新されるために発生します。これを解決するには、反復ごとに i の個別のコピーを作成することが不可欠です。
提供されているソリューションは、doSetTimeout というヘルパー関数を宣言することでこれを実現します。この関数では、i の現在の値を保持する新しい変数が宣言され、タイムアウトの作成時に引数として渡されます。これにより、各タイムアウト関数が i の個別のコピーを持つようになり、実行中の値の更新に関する問題が排除されます。
function doSetTimeout(i) { setTimeout(function() { alert(i); }, 100); } for (var i = 1; i <= 2; ++i) doSetTimeout(i);
このソリューションを使用すると、意図したとおりに連続した値 1 と 2 を正常に出力できます。
以上が「for」ループ内の「setTimeout」が最後の値を 2 回出力するのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。