snippetjavascriptCritical
How can I pass a parameter to a setTimeout() callback?
Viewed 0 times
howparametersettimeoutcancallbackpass
Problem
I have some JavaScript code that looks like:
I get an error that
Everything was working before I used the
I want my
What should I do?
function statechangedPostQuestion()
{
//alert("statechangedPostQuestion");
if (xmlhttp.readyState==4)
{
var topicId = xmlhttp.responseText;
setTimeout("postinsql(topicId)",4000);
}
}
function postinsql(topicId)
{
//alert(topicId);
}I get an error that
topicId is not definedEverything was working before I used the
setTimeout() function.I want my
postinsql(topicId) function to be called after some time.What should I do?
Solution
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 is 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);Code Snippets
setTimeout(function() {
postinsql(topicId);
}, 4000);setTimeout(postinsql.bind(null, topicId), 4000);Context
Stack Overflow Q#1190642, score: 1317
Revisions (0)
No revisions yet.