How can I pass a parameter to a setTimeout() callback?

前端 未结 28 1896
既然无缘
既然无缘 2020-11-21 07:31

I have some JavaScript code that looks like:

function statechangedPostQuestion()
{
  //alert("statechangedPostQuestion");
  if (xmlhttp.readyState==         


        
28条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-21 08:07

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

    You need to feed an anonymous function as a parameter instead of a string, the latter method shouldn't even work per the ECMAScript specification but browsers are just lenient. This is the proper solution, don't ever rely on passing a string as a 'function' when using setTimeout() or setInterval(), it's slower because it has to be evaluated and it just isn't right.

    UPDATE:

    As Hobblin said in his comments to the question, now you can pass arguments to the function inside setTimeout using Function.prototype.bind().

    Example:

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

提交回复
热议问题