ホームページ > ウェブフロントエンド > jsチュートリアル > 「for」ループ内の「setTimeout」が最後の値を 2 回出力するのはなぜですか?それを修正するにはどうすればよいですか?

「for」ループ内の「setTimeout」が最後の値を 2 回出力するのはなぜですか?それを修正するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-03 22:50:40
オリジナル
657 人が閲覧しました

Why Does `setTimeout` in a `for`-Loop Print the Last Value Twice, and How Can I Fix It?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート