我怎样才能传递参数给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)
函数。 我该怎么办?
setTimeout(function() {
postinsql(topicId);
}, 4000)
您需要提供一个匿名函数作为参数而不是字符串,后一种方法甚至不应该按照ECMAScript规范工作,但浏览器只是宽松的。 这是一个合适的解决方案,在使用setTimeout()
或setInterval()
时,不要依赖将字符串作为'函数'来传递,因为它必须被评估并且不正确。
更新:
正如Hobblin在他对这个问题的评论中所说的,现在你可以使用Function.prototype.bind()
将参数传递给setTimeout中的Function.prototype.bind()
例:
setTimeout(postinsql.bind(null, topicId), 4000);
在现代浏览器中,“setTimeout”接收第三个参数,该参数作为参数发送到定时器结束时的内部函数。
例:
var hello = "Hello World";
setTimeout(alert, 1000, hello);
在做一些研究和测试之后,唯一正确的实现是:
setTimeout(yourFunctionReference, 4000, param1, param2, paramN);
setTimeout会将所有额外的参数传递给你的函数,以便在那里处理。
匿名函数可以用于非常基本的东西,但在必须使用“this”的对象实例中,无法使其工作。 任何匿名函数都会将“this”更改为指向窗口,因此您将失去对象引用。
链接地址: http://www.djcxy.com/p/95297.html上一篇: How can I pass a parameter to a setTimeout() callback?
下一篇: Build an HTML5 game