1. ホーム
  2. javascript

[解決済み] setTimeout()コールバックにパラメータを渡すにはどうすればよいですか?

2022-03-17 21:03:28

質問

次のようなJavaScriptのコードがあります。

function statechangedPostQuestion()
{
  //alert("statechangedPostQuestion");
  if (xmlhttp.readyState==4)
  {
    var topicId = xmlhttp.responseText;
    setTimeout("postinsql(topicId)",4000);
  }
}

function postinsql(topicId)
{
  //alert(topicId);
}

というエラーが出ます。 topicId が定義されていない を使う前はすべてうまくいっていました。 setTimeout() 関数を使用します。

私は、自分の postinsql(topicId) 関数がしばらくしてから呼び出されるようにします。 どうしたらいいでしょうか?

どのように解決するのですか?

setTimeout(function() {
    postinsql(topicId);
}, 4000)

文字列の代わりに無名関数をパラメータとして与える必要があります。後者の方法はECMAScriptの仕様では機能しないはずですが、ブラウザが甘いだけです。これは正しい解決方法です。 setTimeout() または setInterval() というのは、評価しなければならないので遅くなるし、正しいとは言えないからです。

UPDATE

でホッブリンが言っていたように コメント の質問に対して、setTimeout内の関数に引数を渡すことができるようになりました。 Function.prototype.bind() .

setTimeout(postinsql.bind(null, topicId), 4000);