setTimeout() コールバックにパラメータを渡すにはどうすればいいですか? 質問する

setTimeout() コールバックにパラメータを渡すにはどうすればいいですか? 質問する

次のような 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)関数をしばらくしてから呼び出すようにしたいのですが、どうすればよいでしょうか?

ベストアンサー1

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

文字列の代わりに匿名関数をパラメータとして渡す必要があります。後者の方法は、ECMAScript 仕様では機能しないはずですが、ブラウザは寛容です。これが適切な解決策です。setTimeout()または を使用するときは、文字列を「関数」として渡すことに頼らないでくださいsetInterval()。評価する必要があるため遅くなり、適切ではありません。

アップデート:

ホブリンは、コメント質問に対して、setTimeout内の関数に引数を渡すには、次のようにします。Function.prototype.bind()

例:

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

おすすめ記事