Javascript – How to pass a parameter to a setTimeout() callback


I have some JavaScript code that looks like:

function statechangedPostQuestion()
  if (xmlhttp.readyState==4)
    var topicId = xmlhttp.responseText;

function postinsql(topicId)

I get an error that topicId is not defined
Everything was working before I used the setTimeout() function.

I want my postinsql(topicId) function to be called after some time.
What should I do?

Best Solution

setTimeout(function() {
}, 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.


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


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