我有一些如下的JavaScript代码:
function statechangedPostQuestion() { //alert("statechangedPostQuestion"); if (xmlhttp.readyState==4) { var topicId = xmlhttp.responseText; setTimeout("postinsql(topicId)",4000); } } function postinsql(topicId) { //alert(topicId); }
我收到topicId未定义的错误,在使用该setTimeout()功能之前,一切都在工作。
topicId
setTimeout()
我希望postinsql(topicId)一段时间后调用我的函数。我该怎么办?
postinsql(topicId)
setTimeout(function() { postinsql(topicId); }, 4000)
您需要将匿名函数作为参数而不是字符串作为参数,后一种方法甚至不符合ECMAScript规范,但浏览器比较宽松。这是正确的解决方案,在使用setTimeout()或时setInterval(),永远不要依赖于将字符串作为“函数”进行传递,因为它必须进行求值并且不正确,所以速度较慢。
setInterval()
正如Hobblin在对问题所说的那样,现在您可以使用将参数传递给setTimeout内部的函数Function.prototype.bind()。
Function.prototype.bind()
例:
setTimeout(postinsql.bind(null, topicId), 4000);