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

「for」ループ内の「setTimeout」が予期しない値を出力するのはなぜですか?これはどのように修正できますか?

Barbara Streisand
リリース: 2024-12-15 21:13:11
オリジナル
611 人が閲覧しました

Why Does `setTimeout` in a `for` Loop Print Unexpected Values, and How Can This Be Fixed?

setTimeout を使用した for ループでの連続値の出力

問題:

以下の場合スクリプトでは、for ループ内で setTimeout 関数が使用され、値を順番に警告します。ただし、結果の出力では、予想どおり '1' と '2' ではなく、値 '3' が 2 回出力されることがわかります。

for (var i = 1; i <= 2; i++) {
    setTimeout(function() { alert(i) }, 100);
}
ログイン後にコピー

理由:

この問題は、for ループ内の i の値が時間の経過とともに変更されるのに、setTimeout 関数が元の値への参照のみを取得するために発生します。 variable.

解決策:

この問題に対処するには、i 変数を各タイムアウト関数の一意の値としてキャプチャする必要があります。これは、i を引数として取り、次の引数で setTimeout を呼び出す新しい関数を作成することで実現できます。

function doSetTimeout(i) {
  setTimeout(function() {
    alert(i);
  }, 100);
}

for (var i = 1; i <= 2; ++i)
  doSetTimeout(i);
ログイン後にコピー

このアプローチでは、ループの各反復で i 変数の個別のコピーが作成されます。アラートされた値が期待どおりに連続して出力されるようにします。

以上が「for」ループ内の「setTimeout」が予期しない値を出力するのはなぜですか?これはどのように修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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