「setTimeout」関数がスケジュールされた時間ではなく即時に実行されるのはなぜですか?

Susan Sarandon
リリース: 2024-11-12 13:40:01
オリジナル
766 人が閲覧しました

Why Is My `setTimeout` Function Executing Immediately Instead of at a Scheduled Time?

setTimeout によってスケジュールされた関数がすぐに実行されないのはなぜですか?

コードは、setTimeout 関数を使用して doRequest を呼び出すプロキシ サーバーをテストしようとしています。 10秒間隔で。奇妙なことに、関数は意図したスケジュールに従うのではなく、すぐに実行されます。

問題の理解

問題は、doRequest 関数を setTimeout に渡す方法にあります。 setTimeout(doRequest(url, proxys[proxy]), proxytimeout) のように、最初の引数として関数を指定すると、その関数はすぐに呼び出されます。

Solutions

この問題を解決するには、次の 3 つのオプションがあります:

  1. 引数を別のパラメータとして渡します:

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
    ログイン後にコピー
  2. 文字列式を使用します:

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
    ログイン後にコピー
  3. クロージャ内で匿名関数を定義します:

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);
    ログイン後にコピー

最初のオプションは、より明確で明示的であるため、推奨されます。 2 番目のオプションは、その「ハッキーな」性質のためあまり望ましくありません。一方、3 番目のオプションは理解するのが複雑になる可能性がありますが、ループ内での値の変更を防ぎます。

以上が「setTimeout」関数がスケジュールされた時間ではなく即時に実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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