ホームページ  >  記事  >  ウェブフロントエンド  >  setTimeout 関数がすぐに実行されるのはなぜですか?

setTimeout 関数がすぐに実行されるのはなぜですか?

DDD
DDDオリジナル
2024-11-11 17:31:03644ブラウズ

Why Does My setTimeout Function Execute Immediately?

setTimeout による予期しない即時関数実行

特定の間隔で関数呼び出しをスケジュールしようとすると、setTimeout が無効になるという問題が発生します。 function は、指定されたタイムアウトにもかかわらず、関数をただちに実行します。 doRequest 関数は 10 秒間隔で呼び出されるはずですが、すぐに呼び出されます。

この即時実行の原因は、setTimeout 関数の呼び出し方法にあります。次のコード スニペットは問題を示しています。

setTimeout(doRequest(url, proxys[proxy]), proxytimeout);

このコードでは、doRequest 関数が最初の引数として setTimeout に渡されますが、関数はスケジュールされているのではなく、すぐに実行されています。

解決策:

この問題を解決し、doRequest を確実にスケジュールするには、次の 3 つの代替方法があります。 setTimeout:

  1. 関数名を文字列として渡す:

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
  2. 匿名を使用関数:

    (function(u, p, t) {
        setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);
  3. 最初に関数名を渡し、次にパラメータ:

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

以上がsetTimeout 関数がすぐに実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。